foucui 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/README.md +43 -0
  2. package/components/QiuAffix/index.vue +186 -0
  3. package/components/QiuAlert/index.vue +208 -0
  4. package/components/QiuAnchor/context.ts +18 -0
  5. package/components/QiuAnchor/index.vue +180 -0
  6. package/components/QiuAnchorLink/index.vue +67 -0
  7. package/components/QiuApp/index.vue +9 -0
  8. package/components/QiuAutocomplete/index.vue +408 -0
  9. package/components/QiuAvatar/index.vue +140 -0
  10. package/components/QiuBacktop/index.vue +121 -0
  11. package/components/QiuBadge/api/index.ts +389 -0
  12. package/components/QiuBadge/components/BadgeImagePickerDialog.vue +243 -0
  13. package/components/QiuBadge/components/BadgeLibraryManagerDialog.vue +30 -0
  14. package/components/QiuBadge/components/BadgeLibraryPanel.vue +182 -0
  15. package/components/QiuBadge/composables/useTableHostHeight.ts +53 -0
  16. package/components/QiuBadge/index.ts +18 -0
  17. package/components/QiuBadge/shared/BadgeTemplateRenderer.vue +32 -0
  18. package/components/QiuBadge/shared/assetUrl.ts +26 -0
  19. package/components/QiuBadge/shared/badgeTemplate.ts +309 -0
  20. package/components/QiuBadge/utils/chinaAreaData.ts +44 -0
  21. package/components/QiuBadge/utils/hostRegion.ts +22 -0
  22. package/components/QiuBadge/utils/pca-code.json +1 -0
  23. package/components/QiuBadge/utils/pdfFromElement.ts +348 -0
  24. package/components/QiuBadge/views/BadgeLibraryView.vue +32 -0
  25. package/components/QiuBadge/views/BadgeManageView.vue +1364 -0
  26. package/components/QiuBadge/views/BadgeTemplateEditorView.vue +10 -0
  27. package/components/QiuBadge/views/BadgeTemplateListView.vue +229 -0
  28. package/components/QiuBadge/views/DeskLabelTemplateListView.vue +227 -0
  29. package/components/QiuBadge/views/DeskLabelView.vue +683 -0
  30. package/components/QiuBadgeDot/index.vue +87 -0
  31. package/components/QiuButton/index.vue +247 -0
  32. package/components/QiuButtonGroup/index.vue +63 -0
  33. package/components/QiuCanvasKit/QiuCanvasEditor.vue +5503 -0
  34. package/components/QiuCanvasKit/QiuCanvasRenderer.vue +348 -0
  35. package/components/QiuCanvasKit/assetUrl.ts +11 -0
  36. package/components/QiuCanvasKit/components/DataModulesPanel.vue +352 -0
  37. package/components/QiuCanvasKit/export/html.ts +132 -0
  38. package/components/QiuCanvasKit/export/pdf.ts +48 -0
  39. package/components/QiuCanvasKit/export/png.ts +50 -0
  40. package/components/QiuCanvasKit/index.ts +20 -0
  41. package/components/QiuCanvasKit/modules/badgeCompat.ts +84 -0
  42. package/components/QiuCanvasKit/modules/dataRegistry.ts +207 -0
  43. package/components/QiuCanvasKit/modules/merge.ts +71 -0
  44. package/components/QiuCanvasKit/presets/badge.ts +67 -0
  45. package/components/QiuCanvasKit/presets/banner.ts +79 -0
  46. package/components/QiuCanvasKit/types.ts +138 -0
  47. package/components/QiuCard/index.vue +104 -0
  48. package/components/QiuCarousel/context.ts +16 -0
  49. package/components/QiuCarousel/index.vue +343 -0
  50. package/components/QiuCarouselItem/index.vue +47 -0
  51. package/components/QiuCascader/index.vue +879 -0
  52. package/components/QiuCascader/types.ts +48 -0
  53. package/components/QiuCheckbox/QiuCheckboxGroup.vue +78 -0
  54. package/components/QiuCheckbox/index.vue +231 -0
  55. package/components/QiuCheckbox/types.ts +8 -0
  56. package/components/QiuCode/index.vue +64 -0
  57. package/components/QiuCol/col.scss +55 -0
  58. package/components/QiuCol/index.vue +64 -0
  59. package/components/QiuCollapse/context.ts +10 -0
  60. package/components/QiuCollapse/index.vue +70 -0
  61. package/components/QiuCollapseItem/index.vue +167 -0
  62. package/components/QiuColorField/index.vue +296 -0
  63. package/components/QiuColorPicker/README.md +118 -0
  64. package/components/QiuColorPicker/index.vue +60 -0
  65. package/components/QiuColorfulCard/index.vue +101 -0
  66. package/components/QiuCombobox/index.vue +277 -0
  67. package/components/QiuConfigProvider/index.vue +31 -0
  68. package/components/QiuContextMenu/index.vue +209 -0
  69. package/components/QiuDate/index.vue +1134 -0
  70. package/components/QiuDescriptions/context.ts +20 -0
  71. package/components/QiuDescriptions/index.vue +115 -0
  72. package/components/QiuDescriptionsItem/index.vue +103 -0
  73. package/components/QiuDialog/index.vue +828 -0
  74. package/components/QiuDigitalCard/index.vue +159 -0
  75. package/components/QiuDivider/index.vue +185 -0
  76. package/components/QiuDot/index.vue +83 -0
  77. package/components/QiuDrawer/index.vue +350 -0
  78. package/components/QiuDropdown/QiuDropdownItem.vue +74 -0
  79. package/components/QiuDropdown/QiuDropdownMenu.vue +22 -0
  80. package/components/QiuDropdown/context.ts +9 -0
  81. package/components/QiuDropdown/index.vue +189 -0
  82. package/components/QiuEmpty/index.vue +73 -0
  83. package/components/QiuForm/index.vue +172 -0
  84. package/components/QiuForm/types.ts +39 -0
  85. package/components/QiuFormItem/index.vue +276 -0
  86. package/components/QiuFullscreen/index.vue +11 -0
  87. package/components/QiuGrid/index.vue +408 -0
  88. package/components/QiuHoverCard/index.vue +192 -0
  89. package/components/QiuIcon/index.vue +117 -0
  90. package/components/QiuIconPicker/iconify.libraries.ts +182 -0
  91. package/components/QiuIconPicker/icons.catalog.ts +3072 -0
  92. package/components/QiuIconPicker/index.vue +488 -0
  93. package/components/QiuImage/index.vue +177 -0
  94. package/components/QiuInput/index.vue +328 -0
  95. package/components/QiuInputNumber/index.vue +295 -0
  96. package/components/QiuInputOtp/index.vue +190 -0
  97. package/components/QiuKbd/index.vue +57 -0
  98. package/components/QiuLayoutContainer/index.vue +50 -0
  99. package/components/QiuLinkPreview/index.vue +224 -0
  100. package/components/QiuLoading/index.ts +176 -0
  101. package/components/QiuLoading/spinner.vue +820 -0
  102. package/components/QiuLoading/types.ts +44 -0
  103. package/components/QiuMention/index.vue +299 -0
  104. package/components/QiuMenu/QiuMenuRoot.vue +241 -0
  105. package/components/QiuMenu/components/QiuMenuItem.vue +340 -0
  106. package/components/QiuMenu/components/QiuSubMenu.vue +504 -0
  107. package/components/QiuMenu/context.ts +21 -0
  108. package/components/QiuMenu/index.vue +43 -0
  109. package/components/QiuMenuNav/QiuMenuNavItem.vue +100 -0
  110. package/components/QiuMenuNav/QiuMenuNavSub.vue +120 -0
  111. package/components/QiuMenuNav/context.ts +14 -0
  112. package/components/QiuMenuNav/index.vue +148 -0
  113. package/components/QiuMsg/QiuMsgItem.vue +180 -0
  114. package/components/QiuMsg/index.ts +158 -0
  115. package/components/QiuMsg/types.ts +23 -0
  116. package/components/QiuMsgBox/index.ts +147 -0
  117. package/components/QiuNotification/QiuNotificationItem.vue +168 -0
  118. package/components/QiuNotification/index.ts +155 -0
  119. package/components/QiuNotification/types.ts +14 -0
  120. package/components/QiuPage/index.vue +12 -0
  121. package/components/QiuPageHeader/index.vue +115 -0
  122. package/components/QiuPageMain/index.vue +78 -0
  123. package/components/QiuPagination/index.vue +421 -0
  124. package/components/QiuPasswordStrength/index.vue +101 -0
  125. package/components/QiuPopconfirm/index.vue +196 -0
  126. package/components/QiuPopover/index.vue +277 -0
  127. package/components/QiuProgress/index.vue +235 -0
  128. package/components/QiuQrcode/index.vue +302 -0
  129. package/components/QiuQueryForm/components/QiuQueryFormBottomPanel.vue +13 -0
  130. package/components/QiuQueryForm/components/QiuQueryFormLeftPanel.vue +37 -0
  131. package/components/QiuQueryForm/components/QiuQueryFormRightPanel.vue +37 -0
  132. package/components/QiuQueryForm/components/QiuQueryFormTopPanel.vue +13 -0
  133. package/components/QiuQueryForm/index.vue +117 -0
  134. package/components/QiuRadio/QiuRadioGroup.vue +75 -0
  135. package/components/QiuRadio/index.vue +191 -0
  136. package/components/QiuRadio/types.ts +9 -0
  137. package/components/QiuRate/index.vue +184 -0
  138. package/components/QiuRefresh/index.vue +32 -0
  139. package/components/QiuResult/index.vue +103 -0
  140. package/components/QiuRow/index.vue +60 -0
  141. package/components/QiuRow/types.ts +5 -0
  142. package/components/QiuScrollbar/index.vue +107 -0
  143. package/components/QiuSearchBar/index.vue +154 -0
  144. package/components/QiuSegmented/index.vue +120 -0
  145. package/components/QiuSelect/QiuOption.vue +93 -0
  146. package/components/QiuSelect/index.vue +452 -0
  147. package/components/QiuSelect/types.ts +15 -0
  148. package/components/QiuSkeleton/index.vue +78 -0
  149. package/components/QiuSlider/index.vue +266 -0
  150. package/components/QiuSpace/index.vue +95 -0
  151. package/components/QiuSparkline/index.vue +92 -0
  152. package/components/QiuStatistic/index.vue +4 -0
  153. package/components/QiuStatistics/index.vue +123 -0
  154. package/components/QiuStep/index.vue +220 -0
  155. package/components/QiuSteps/context.ts +25 -0
  156. package/components/QiuSteps/index.vue +84 -0
  157. package/components/QiuSwitch/index.vue +145 -0
  158. package/components/QiuTabBar/index.vue +218 -0
  159. package/components/QiuTabBar/types.ts +19 -0
  160. package/components/QiuTabPane/index.vue +82 -0
  161. package/components/QiuTable/columns.ts +16 -0
  162. package/components/QiuTable/export.ts +102 -0
  163. package/components/QiuTable/index.ts +24 -0
  164. package/components/QiuTable/index.vue +3503 -0
  165. package/components/QiuTable/registry.ts +75 -0
  166. package/components/QiuTable/styles/table.scss +1230 -0
  167. package/components/QiuTable/types.ts +413 -0
  168. package/components/QiuTable/useArea.ts +202 -0
  169. package/components/QiuTable/useColumns.ts +325 -0
  170. package/components/QiuTable/useEdit.ts +136 -0
  171. package/components/QiuTable/useExtras.ts +115 -0
  172. package/components/QiuTable/useHistory.ts +77 -0
  173. package/components/QiuTable/useMerge.ts +105 -0
  174. package/components/QiuTable/useResize.ts +86 -0
  175. package/components/QiuTable/useScrollSync.ts +152 -0
  176. package/components/QiuTable/useVirtual.ts +97 -0
  177. package/components/QiuTable/utils.ts +165 -0
  178. package/components/QiuTableColumn/index.vue +101 -0
  179. package/components/QiuTag/index.vue +143 -0
  180. package/components/QiuText/index.vue +99 -0
  181. package/components/QiuTime/index.vue +548 -0
  182. package/components/QiuTimeAgo/index.vue +103 -0
  183. package/components/QiuTimeline/index.vue +54 -0
  184. package/components/QiuTimelineItem/index.vue +140 -0
  185. package/components/QiuTips/index.vue +323 -0
  186. package/components/QiuTooltip/index.vue +237 -0
  187. package/components/QiuTransfer/index.vue +277 -0
  188. package/components/QiuTree/QiuTreeNode.vue +146 -0
  189. package/components/QiuTree/index.vue +143 -0
  190. package/components/QiuTree/types.ts +30 -0
  191. package/components/QiuTreeSelect/index.vue +259 -0
  192. package/components/QiuTrend/index.vue +92 -0
  193. package/components/QiuUpload/index.vue +628 -0
  194. package/components/QiuUploadCrop/index.vue +1267 -0
  195. package/components/QiuWatermark/index.vue +121 -0
  196. package/components/useBodyScrollLock.ts +28 -0
  197. package/dist/components/QiuAnchor/context.d.ts +15 -0
  198. package/dist/components/QiuAnchorLink/index.vue.d.ts +23 -0
  199. package/dist/components/QiuBadge/api/index.d.ts +110 -0
  200. package/dist/components/QiuBadge/components/BadgeImagePickerDialog.vue.d.ts +16 -0
  201. package/dist/components/QiuBadge/components/BadgeLibraryManagerDialog.vue.d.ts +9 -0
  202. package/dist/components/QiuBadge/components/BadgeLibraryPanel.vue.d.ts +5 -0
  203. package/dist/components/QiuBadge/composables/useTableHostHeight.d.ts +7 -0
  204. package/dist/components/QiuBadge/index.d.ts +18 -0
  205. package/dist/components/QiuBadge/shared/BadgeTemplateRenderer.vue.d.ts +14 -0
  206. package/dist/components/QiuBadge/shared/assetUrl.d.ts +1 -0
  207. package/dist/components/QiuBadge/shared/badgeTemplate.d.ts +132 -0
  208. package/dist/components/QiuBadge/utils/chinaAreaData.d.ts +9 -0
  209. package/dist/components/QiuBadge/utils/hostRegion.d.ts +3 -0
  210. package/dist/components/QiuBadge/utils/pca-code.json.d.ts +3 -0
  211. package/dist/components/QiuBadge/utils/pdfFromElement.d.ts +14 -0
  212. package/dist/components/QiuBadge/views/BadgeLibraryView.vue.d.ts +2 -0
  213. package/dist/components/QiuBadge/views/BadgeManageView.vue.d.ts +7 -0
  214. package/dist/components/QiuBadge/views/BadgeTemplateListView.vue.d.ts +4 -0
  215. package/dist/components/QiuBadge/views/DeskLabelTemplateListView.vue.d.ts +4 -0
  216. package/dist/components/QiuBadge/views/DeskLabelView.vue.d.ts +4 -0
  217. package/dist/components/QiuButton/index.vue.d.ts +52 -0
  218. package/dist/components/QiuCanvasKit/QiuCanvasEditor.vue.d.ts +24 -0
  219. package/dist/components/QiuCanvasKit/QiuCanvasRenderer.vue.d.ts +13 -0
  220. package/dist/components/QiuCanvasKit/assetUrl.d.ts +7 -0
  221. package/dist/components/QiuCanvasKit/components/DataModulesPanel.vue.d.ts +23 -0
  222. package/dist/components/QiuCanvasKit/export/html.d.ts +12 -0
  223. package/dist/components/QiuCanvasKit/export/pdf.d.ts +9 -0
  224. package/dist/components/QiuCanvasKit/export/png.d.ts +8 -0
  225. package/dist/components/QiuCanvasKit/index.d.ts +19 -0
  226. package/dist/components/QiuCanvasKit/modules/badgeCompat.d.ts +8 -0
  227. package/dist/components/QiuCanvasKit/modules/dataRegistry.d.ts +23 -0
  228. package/dist/components/QiuCanvasKit/modules/merge.d.ts +12 -0
  229. package/dist/components/QiuCanvasKit/presets/badge.d.ts +12 -0
  230. package/dist/components/QiuCanvasKit/presets/banner.d.ts +4 -0
  231. package/dist/components/QiuCanvasKit/types.d.ts +119 -0
  232. package/dist/components/QiuCarousel/context.d.ts +13 -0
  233. package/dist/components/QiuCarouselItem/index.vue.d.ts +20 -0
  234. package/dist/components/QiuCascader/types.d.ts +25 -0
  235. package/dist/components/QiuCheckbox/QiuCheckboxGroup.vue.d.ts +33 -0
  236. package/dist/components/QiuCheckbox/index.vue.d.ts +38 -0
  237. package/dist/components/QiuCheckbox/types.d.ts +7 -0
  238. package/dist/components/QiuCode/index.vue.d.ts +15 -0
  239. package/dist/components/QiuCollapse/context.d.ts +8 -0
  240. package/dist/components/QiuCollapseItem/index.vue.d.ts +30 -0
  241. package/dist/components/QiuColorField/index.vue.d.ts +23 -0
  242. package/dist/components/QiuColorPicker/index.vue.d.ts +21 -0
  243. package/dist/components/QiuCombobox/index.vue.d.ts +54 -0
  244. package/dist/components/QiuContextMenu/index.vue.d.ts +46 -0
  245. package/dist/components/QiuDescriptions/context.d.ts +16 -0
  246. package/dist/components/QiuDescriptionsItem/index.vue.d.ts +25 -0
  247. package/dist/components/QiuDigitalCard/index.vue.d.ts +45 -0
  248. package/dist/components/QiuDropdown/QiuDropdownItem.vue.d.ts +30 -0
  249. package/dist/components/QiuDropdown/QiuDropdownMenu.vue.d.ts +17 -0
  250. package/dist/components/QiuDropdown/context.d.ts +7 -0
  251. package/dist/components/QiuDropdown/index.vue.d.ts +46 -0
  252. package/dist/components/QiuForm/types.d.ts +31 -0
  253. package/dist/components/QiuHoverCard/index.vue.d.ts +44 -0
  254. package/dist/components/QiuIcon/index.vue.d.ts +18 -0
  255. package/dist/components/QiuIconPicker/iconify.libraries.d.ts +18 -0
  256. package/dist/components/QiuIconPicker/icons.catalog.d.ts +12 -0
  257. package/dist/components/QiuInput/index.vue.d.ts +71 -0
  258. package/dist/components/QiuInputNumber/index.vue.d.ts +38 -0
  259. package/dist/components/QiuInputOtp/index.vue.d.ts +28 -0
  260. package/dist/components/QiuKbd/index.vue.d.ts +22 -0
  261. package/dist/components/QiuLayoutContainer/index.vue.d.ts +29 -0
  262. package/dist/components/QiuLinkPreview/index.vue.d.ts +43 -0
  263. package/dist/components/QiuLoading/index.d.ts +26 -0
  264. package/dist/components/QiuLoading/spinner.vue.d.ts +14 -0
  265. package/dist/components/QiuLoading/types.d.ts +2 -0
  266. package/dist/components/QiuMention/index.vue.d.ts +35 -0
  267. package/dist/components/QiuMenu/QiuMenuRoot.vue.d.ts +36 -0
  268. package/dist/components/QiuMenu/context.d.ts +19 -0
  269. package/dist/components/QiuMenuNav/QiuMenuNavItem.vue.d.ts +26 -0
  270. package/dist/components/QiuMenuNav/QiuMenuNavSub.vue.d.ts +25 -0
  271. package/dist/components/QiuMenuNav/context.d.ts +12 -0
  272. package/dist/components/QiuMenuNav/index.vue.d.ts +35 -0
  273. package/dist/components/QiuMsg/QiuMsgItem.vue.d.ts +15 -0
  274. package/dist/components/QiuMsg/index.d.ts +30 -0
  275. package/dist/components/QiuMsg/types.d.ts +12 -0
  276. package/dist/components/QiuMsgBox/index.d.ts +14 -0
  277. package/dist/components/QiuNotification/QiuNotificationItem.vue.d.ts +16 -0
  278. package/dist/components/QiuNotification/index.d.ts +30 -0
  279. package/dist/components/QiuNotification/types.d.ts +12 -0
  280. package/dist/components/QiuPageMain/index.vue.d.ts +27 -0
  281. package/dist/components/QiuPagination/index.vue.d.ts +44 -0
  282. package/dist/components/QiuPasswordStrength/index.vue.d.ts +9 -0
  283. package/dist/components/QiuQrcode/index.vue.d.ts +20 -0
  284. package/dist/components/QiuRadio/QiuRadioGroup.vue.d.ts +33 -0
  285. package/dist/components/QiuRadio/types.d.ts +8 -0
  286. package/dist/components/QiuRow/types.d.ts +4 -0
  287. package/dist/components/QiuSearchBar/index.vue.d.ts +38 -0
  288. package/dist/components/QiuSelect/QiuOption.vue.d.ts +24 -0
  289. package/dist/components/QiuSelect/index.vue.d.ts +52 -0
  290. package/dist/components/QiuSelect/types.d.ts +13 -0
  291. package/dist/components/QiuSparkline/index.vue.d.ts +18 -0
  292. package/dist/components/QiuStep/index.vue.d.ts +31 -0
  293. package/dist/components/QiuSteps/context.d.ts +21 -0
  294. package/dist/components/QiuSwitch/index.vue.d.ts +25 -0
  295. package/dist/components/QiuTabBar/index.vue.d.ts +32 -0
  296. package/dist/components/QiuTabBar/types.d.ts +16 -0
  297. package/dist/components/QiuTabPane/index.vue.d.ts +25 -0
  298. package/dist/components/QiuTable/columns.d.ts +1 -0
  299. package/dist/components/QiuTable/export.d.ts +18 -0
  300. package/dist/components/QiuTable/index.d.ts +3 -0
  301. package/dist/components/QiuTable/index.vue.d.ts +322 -0
  302. package/dist/components/QiuTable/registry.d.ts +39 -0
  303. package/dist/components/QiuTable/types.d.ts +353 -0
  304. package/dist/components/QiuTable/useArea.d.ts +51 -0
  305. package/dist/components/QiuTable/useColumns.d.ts +67 -0
  306. package/dist/components/QiuTable/useEdit.d.ts +36 -0
  307. package/dist/components/QiuTable/useExtras.d.ts +38 -0
  308. package/dist/components/QiuTable/useHistory.d.ts +44 -0
  309. package/dist/components/QiuTable/useMerge.d.ts +28 -0
  310. package/dist/components/QiuTable/useResize.d.ts +19 -0
  311. package/dist/components/QiuTable/useScrollSync.d.ts +25 -0
  312. package/dist/components/QiuTable/useVirtual.d.ts +30 -0
  313. package/dist/components/QiuTable/utils.d.ts +54 -0
  314. package/dist/components/QiuTime/index.vue.d.ts +43 -0
  315. package/dist/components/QiuTimeAgo/index.vue.d.ts +35 -0
  316. package/dist/components/QiuTimelineItem/index.vue.d.ts +35 -0
  317. package/dist/components/QiuTooltip/index.vue.d.ts +38 -0
  318. package/dist/components/QiuTree/types.d.ts +13 -0
  319. package/dist/components/QiuTrend/index.vue.d.ts +34 -0
  320. package/dist/components/QiuUpload/index.vue.d.ts +86 -0
  321. package/dist/components/QiuUploadCrop/index.vue.d.ts +136 -0
  322. package/dist/components/useBodyScrollLock.d.ts +4 -0
  323. package/dist/foucui.css +1 -0
  324. package/dist/foucui.js +26509 -0
  325. package/dist/foucui.umd.cjs +125 -0
  326. package/dist/index.d.ts +46 -0
  327. package/dist/src/bridge/@/api/media.d.ts +7 -0
  328. package/dist/src/bridge/@/api/notice.d.ts +5 -0
  329. package/dist/src/bridge/@/config/index.d.ts +29 -0
  330. package/dist/src/bridge/@/config/media.config.d.ts +15 -0
  331. package/dist/src/bridge/@/config/security.config.d.ts +7 -0
  332. package/dist/src/bridge/@/i18n/index.d.ts +7 -0
  333. package/dist/src/bridge/@/store/modules/bing.d.ts +3 -0
  334. package/dist/src/bridge/@/store/modules/errorLog.d.ts +3 -0
  335. package/dist/src/bridge/@/store/modules/media.d.ts +4 -0
  336. package/dist/src/bridge/@/store/modules/routes.d.ts +3 -0
  337. package/dist/src/bridge/@/store/modules/settings.d.ts +3 -0
  338. package/dist/src/bridge/@/store/modules/tabs.d.ts +3 -0
  339. package/dist/src/bridge/@/store/modules/user.d.ts +3 -0
  340. package/dist/src/bridge/@/utils/convertToCamelCase.d.ts +2 -0
  341. package/dist/src/bridge/@/utils/index.d.ts +5 -0
  342. package/dist/src/bridge/@/utils/pageTitle.d.ts +1 -0
  343. package/dist/src/bridge/@/utils/routes.d.ts +11 -0
  344. package/dist/src/bridge/@/utils/validate.d.ts +13 -0
  345. package/dist/src/bridge/@qiu/plugins/shortcuts.d.ts +2 -0
  346. package/dist/src/i18n.d.ts +2 -0
  347. package/package.json +83 -0
  348. package/plugins/qiu.ts +83 -0
  349. package/plugins/shortcuts.ts +69 -0
  350. package/src/bridge/@/api/media.ts +8 -0
  351. package/src/bridge/@/api/notice.ts +5 -0
  352. package/src/bridge/@/config/index.ts +38 -0
  353. package/src/bridge/@/config/media.config.ts +37 -0
  354. package/src/bridge/@/config/security.config.ts +8 -0
  355. package/src/bridge/@/i18n/index.ts +6 -0
  356. package/src/bridge/@/store/modules/bing.ts +9 -0
  357. package/src/bridge/@/store/modules/errorLog.ts +9 -0
  358. package/src/bridge/@/store/modules/media.ts +10 -0
  359. package/src/bridge/@/store/modules/routes.ts +10 -0
  360. package/src/bridge/@/store/modules/settings.ts +9 -0
  361. package/src/bridge/@/store/modules/tabs.ts +9 -0
  362. package/src/bridge/@/store/modules/user.ts +9 -0
  363. package/src/bridge/@/utils/convertToCamelCase.ts +11 -0
  364. package/src/bridge/@/utils/index.ts +9 -0
  365. package/src/bridge/@/utils/pageTitle.ts +4 -0
  366. package/src/bridge/@/utils/routes.ts +14 -0
  367. package/src/bridge/@/utils/validate.ts +17 -0
  368. package/src/bridge/@qiu/plugins/shortcuts.ts +3 -0
  369. package/src/i18n.ts +8 -0
  370. package/src/icons/qiu-logo.svg +1 -0
  371. package/styles/dark.scss +194 -0
  372. package/styles/normalize.css +349 -0
  373. package/styles/plain.scss +423 -0
  374. package/styles/qiu-tokens.scss +40 -0
  375. package/styles/qiu.scss +1149 -0
  376. package/styles/technology.scss +452 -0
  377. package/styles/var.scss +382 -0
  378. package/styles/variables.scss +77 -0
@@ -0,0 +1,413 @@
1
+ /** QiuTable 列配置(props.columns) */
2
+ export interface QiuTableColumnConfig {
3
+ /** 列标题(同 title,优先 label) */
4
+ label?: string
5
+ /** vxe 别名,与 label 等价 */
6
+ title?: string
7
+ prop?: string
8
+ field?: string
9
+ /** 固定列宽;与 minWidth 同时存在时以 width 为准 */
10
+ width?: string | number
11
+ /** 最小列宽;未设 width 时作为弹性列下限,并可参与剩余宽度分配 */
12
+ minWidth?: string | number
13
+ /** 最大列宽;拖拽与自适应时的上限 */
14
+ maxWidth?: string | number
15
+ fixed?: boolean | 'left' | 'right'
16
+ sortable?: boolean | string
17
+ /** 开启筛选;未传 filters 时按当前列数据自动生成选项 */
18
+ filterable?: boolean
19
+ align?: 'left' | 'center' | 'right'
20
+ footerAlign?: 'left' | 'center' | 'right'
21
+ /**
22
+ * 编辑器类型(与 type 二选一,优先 editor)
23
+ * switch | select | input | number | date | datetime | text
24
+ */
25
+ editor?: 'switch' | 'select' | 'input' | 'number' | 'date' | 'datetime' | 'time' | 'text'
26
+ /**
27
+ * 完整编辑渲染对象(优先于 editor / type)
28
+ * 对齐 vxe editRender:{ name, props, options, events, attrs, enabled }
29
+ */
30
+ editRender?: string | QiuTableEditRender
31
+ /**
32
+ * selection/index/seq,或编辑器类型别名
33
+ */
34
+ type?: string
35
+ editorProps?: Record<string, any>
36
+ options?: { label: string; value: any }[]
37
+ slot?: string
38
+ formatter?: (row: any, column: QiuTableColumnConfig, cellValue: any) => string
39
+ editable?: boolean
40
+ filters?: { text: string; value: any }[]
41
+ filterMethod?: (value: any, row: any, column: QiuTableColumnConfig) => boolean
42
+ treeNode?: boolean
43
+ dragSort?: boolean
44
+ showOverflowTooltip?: boolean
45
+ className?: string
46
+ headerClassName?: string
47
+ footerClassName?: string
48
+ headerAlign?: 'left' | 'center' | 'right'
49
+ /** 多级表头子列(父子列自动合并表头单元格) */
50
+ children?: QiuTableColumnConfig[]
51
+ /** 表尾格式化 */
52
+ footerFormatter?: (params: {
53
+ column: QiuTableColumnConfig
54
+ items: any[]
55
+ data: any[]
56
+ rowIndex: number
57
+ }) => string
58
+ /** 快捷聚合:sum | avg | count(配合 showFooter) */
59
+ aggFunc?: 'sum' | 'avg' | 'count'
60
+ resizable?: boolean
61
+ /** 全局 formats 名称,或列内 formatter 优先 */
62
+ format?: string
63
+ /** 全局 renderer 名称 */
64
+ cellRender?: string | { name: string; props?: Record<string, any> }
65
+ /** 自定义列面板中是否默认可见 */
66
+ visible?: boolean
67
+ /** 透传业务参数 */
68
+ params?: Record<string, any>
69
+ }
70
+
71
+ /** 列 editRender 完整对象 */
72
+ export interface QiuTableEditRender {
73
+ /** 内置:input/select/number/date/datetime/time/switch/text;或 QiuTableEditRenderer 注册名 */
74
+ name: string
75
+ props?: Record<string, any>
76
+ options?: { label: string; value: any }[]
77
+ attrs?: Record<string, any>
78
+ events?: Record<string, (...args: any[]) => void>
79
+ /** false 时禁用编辑 */
80
+ enabled?: boolean
81
+ autofocus?: string | boolean
82
+ }
83
+
84
+ /** @deprecated 使用 QiuTableColumnConfig */
85
+ export type QiuTableColumn = QiuTableColumnConfig
86
+
87
+ export interface QiuTableRegisteredColumn {
88
+ id: symbol
89
+ props: Record<string, any>
90
+ slots: {
91
+ default?: (scope: QiuTableCellScope) => any
92
+ header?: (scope: QiuTableHeaderScope) => any
93
+ }
94
+ }
95
+
96
+ export interface QiuTableCellScope {
97
+ row: any
98
+ column: QiuTableColumnConfig
99
+ $index: number
100
+ cellValue: any
101
+ level?: number
102
+ }
103
+
104
+ export interface QiuTableHeaderScope {
105
+ column: QiuTableColumnConfig
106
+ }
107
+
108
+ export interface QiuTableFlatRow {
109
+ row: any
110
+ level: number
111
+ hasChildren: boolean
112
+ expanded: boolean
113
+ flatIndex: number
114
+ }
115
+
116
+ export interface QiuTableRegisterContext {
117
+ register: (col: QiuTableRegisteredColumn) => void
118
+ unregister: (id: symbol) => void
119
+ update: (col: QiuTableRegisteredColumn) => void
120
+ }
121
+
122
+ export interface QiuTableEditConfig {
123
+ trigger?: 'click' | 'dblclick' | 'manual' | 'always'
124
+ mode?: 'cell' | 'row'
125
+ showIcon?: boolean
126
+ /** 点击表格外自动清除编辑态,默认 true */
127
+ autoClear?: boolean
128
+ }
129
+
130
+ export interface QiuTableSortConfig {
131
+ /** true:不本地排序,仅抛 sort-change */
132
+ remote?: boolean
133
+ multiple?: boolean
134
+ chronological?: boolean
135
+ defaultSort?:
136
+ | { field?: string; prop?: string; order?: 'asc' | 'desc' | null }
137
+ | { field?: string; prop?: string; order?: 'asc' | 'desc' | null }[]
138
+ trigger?: 'default' | 'cell'
139
+ }
140
+
141
+ export interface QiuTableRadioConfig {
142
+ highlight?: boolean
143
+ checkRowKey?: string | number
144
+ strict?: boolean
145
+ trigger?: 'default' | 'row' | 'cell'
146
+ }
147
+
148
+ export interface QiuTableExpandConfig {
149
+ expandAll?: boolean
150
+ accordion?: boolean
151
+ lazy?: boolean
152
+ labelField?: string
153
+ }
154
+
155
+ export interface QiuTableColumnDragConfig {
156
+ enabled?: boolean
157
+ showIcon?: boolean
158
+ }
159
+
160
+ export interface QiuTableKeepSourceConfig {
161
+ enabled?: boolean
162
+ }
163
+
164
+ export interface QiuTableFilterConfig {
165
+ /** true:不本地过滤,仅抛 filter-change */
166
+ remote?: boolean
167
+ }
168
+
169
+ export interface QiuTableRowConfig {
170
+ /** 点击高亮当前行,默认 true */
171
+ isCurrent?: boolean
172
+ /** 鼠标悬停高亮,默认 true */
173
+ isHover?: boolean
174
+ /** vxe 别名 → isHover */
175
+ highlightHoverRow?: boolean
176
+ /** vxe 别名 → isCurrent */
177
+ highlightCurrentRow?: boolean
178
+ height?: number
179
+ keyField?: string
180
+ }
181
+
182
+ /** 键盘行为(对齐 vxe keyboardConfig) */
183
+ export interface QiuTableKeyboardConfig {
184
+ /** ↑↓ 移动当前行 / 活动单元格,默认 true */
185
+ isArrow?: boolean
186
+ /** Enter 进入编辑,默认 true(需 editable) */
187
+ isEnter?: boolean
188
+ /** Esc 退出编辑,默认 true */
189
+ isEsc?: boolean
190
+ /** Tab 横向移动单元格,默认 false */
191
+ isTab?: boolean
192
+ /** Ctrl+Z / Ctrl+Y 撤销重做,默认 true(需 historyConfig 开启) */
193
+ isUndo?: boolean
194
+ /** 编辑时方向键是否仍导航,默认 false */
195
+ isEdit?: boolean
196
+ }
197
+
198
+ /** 剪贴板(对齐 vxe clipboardConfig) */
199
+ export interface QiuTableClipboardConfig {
200
+ /** Ctrl+C 复制选区,默认 true */
201
+ isCopy?: boolean
202
+ /** Ctrl+X 剪切,默认 true */
203
+ isCut?: boolean
204
+ /** Ctrl+V 粘贴,默认 true */
205
+ isPaste?: boolean
206
+ }
207
+
208
+ /** 溢出提示(对齐 vxe tooltipConfig) */
209
+ export interface QiuTableTooltipConfig {
210
+ /** 全局开启溢出 tooltip,默认 true */
211
+ showAll?: boolean
212
+ /** 主题:light | dark */
213
+ theme?: 'light' | 'dark'
214
+ /** 进入延迟 ms */
215
+ enterDelay?: number
216
+ /** 离开延迟 ms */
217
+ leaveDelay?: number
218
+ /** 自定义内容;返回 null 则不显示 */
219
+ contentMethod?: (params: {
220
+ row: any
221
+ column: QiuTableColumnConfig
222
+ cellValue: any
223
+ }) => string | null | undefined
224
+ }
225
+
226
+ /** 导出配置对象(对齐 vxe exportConfig) */
227
+ export interface QiuTableExportConfig {
228
+ filename?: string
229
+ /** 默认格式 */
230
+ type?: 'csv' | 'xls' | 'xlsx'
231
+ sheetName?: string
232
+ /** 导出模式:当前页 / 全部 / 选中 / 指定页码范围 */
233
+ mode?: 'current' | 'all' | 'selected' | 'range'
234
+ modes?: Array<'current' | 'all' | 'selected' | 'range'>
235
+ /** 范围导出起始页(从 1 开始,mode=range 时有效) */
236
+ startPage?: number
237
+ /** 范围导出结束页(从 1 开始,mode=range 时有效) */
238
+ endPage?: number
239
+ /** 打开导出前 */
240
+ beforeExportMethod?: (params: { options: QiuTableExportConfig }) => void | boolean | Promise<void | boolean>
241
+ /** 导出后 */
242
+ afterExportMethod?: (params: { options: QiuTableExportConfig }) => void
243
+ /** 列过滤 */
244
+ columnFilterMethod?: (params: { column: QiuTableColumnConfig }) => boolean
245
+ }
246
+
247
+ /** 自定义工具栏工具 */
248
+ export interface QiuTableToolbarTool {
249
+ /** 唯一名称 */
250
+ name: string
251
+ /** 渲染组件;传入组件对象 */
252
+ component?: any
253
+ /** 透传给组件的 props */
254
+ props?: Record<string, any>
255
+ /** 位置:left | center | right,默认 right */
256
+ position?: 'left' | 'center' | 'right'
257
+ /** 排序权重 */
258
+ order?: number
259
+ }
260
+
261
+ /** 工具栏配置对象(对齐 vxe toolbarConfig) */
262
+ export interface QiuTableToolbarConfig {
263
+ enabled?: boolean
264
+ /** 刷新按钮,默认 true */
265
+ refresh?: boolean
266
+ /** 导出按钮,默认 true */
267
+ export?: boolean
268
+ /** 导入按钮,默认 false */
269
+ import?: boolean
270
+ /** 打印按钮,默认 false */
271
+ print?: boolean
272
+ /** 列自定义按钮,默认 true */
273
+ custom?: boolean
274
+ /** 全屏按钮,默认 true */
275
+ zoom?: boolean
276
+ /** Excel 复制按钮,默认 false */
277
+ copy?: boolean
278
+ /** 内置工具按钮的位置,默认 right */
279
+ toolsPlacement?: 'left' | 'center' | 'right'
280
+ /** 自定义工具插件 */
281
+ customTools?: QiuTableToolbarTool[]
282
+ }
283
+
284
+ /** 编辑历史(undo/redo) */
285
+ export interface QiuTableHistoryConfig {
286
+ /** 默认 false;设 true 或配合 keyboardConfig.isUndo */
287
+ enabled?: boolean
288
+ /** 栈深度,默认 50 */
289
+ size?: number
290
+ }
291
+
292
+ /** 解析行 hover 是否开启 */
293
+ export function resolveRowHover(cfg?: QiuTableRowConfig): boolean {
294
+ if (!cfg) return true
295
+ if (cfg.isHover !== undefined) return cfg.isHover !== false
296
+ if (cfg.highlightHoverRow !== undefined) return !!cfg.highlightHoverRow
297
+ return true
298
+ }
299
+
300
+ /** 解析当前行高亮是否开启 */
301
+ export function resolveRowCurrent(cfg?: QiuTableRowConfig): boolean {
302
+ if (!cfg) return true
303
+ if (cfg.isCurrent !== undefined) return cfg.isCurrent !== false
304
+ if (cfg.highlightCurrentRow !== undefined) return !!cfg.highlightCurrentRow
305
+ return true
306
+ }
307
+
308
+ /** 解析列 editRender 对象 */
309
+ export function resolveEditRender(
310
+ col: Pick<QiuTableColumnConfig, 'editRender' | 'editor' | 'type' | 'editorProps' | 'options'>
311
+ ): QiuTableEditRender | undefined {
312
+ if (col.editRender) {
313
+ if (typeof col.editRender === 'string') {
314
+ return { name: col.editRender, props: col.editorProps, options: col.options }
315
+ }
316
+ return {
317
+ ...col.editRender,
318
+ props: { ...(col.editorProps || {}), ...(col.editRender.props || {}) },
319
+ options: col.editRender.options || col.options,
320
+ }
321
+ }
322
+ const name = col.editor || (col.type && QIU_EDITOR_TYPES.has(col.type) ? col.type : undefined)
323
+ if (!name) return undefined
324
+ return { name, props: col.editorProps, options: col.options }
325
+ }
326
+
327
+ export interface QiuTableColumnConfigExtra {
328
+ resizable?: boolean
329
+ /** 未指定列宽时的默认最小宽 */
330
+ minWidth?: number
331
+ /** 默认最大宽 */
332
+ maxWidth?: number
333
+ /** 默认固定宽 */
334
+ width?: number
335
+ }
336
+
337
+ export interface QiuTableMergeCell {
338
+ row: number
339
+ col: number
340
+ rowspan: number
341
+ colspan: number
342
+ }
343
+
344
+ export type QiuTableSpanMethod = (params: {
345
+ row: any
346
+ column: QiuTableColumnConfig
347
+ rowIndex: number
348
+ columnIndex: number
349
+ data: any[]
350
+ }) =>
351
+ | { rowspan: number; colspan: number }
352
+ | [number, number]
353
+ | number[]
354
+ | null
355
+ | undefined
356
+
357
+ export interface QiuTablePagerConfig {
358
+ enabled?: boolean
359
+ currentPage?: number
360
+ pageSize?: number
361
+ pageSizes?: number[]
362
+ total?: number
363
+ layouts?: string[]
364
+ background?: boolean
365
+ small?: boolean
366
+ }
367
+
368
+ export interface QiuTableFooterMethodParams {
369
+ columns: QiuTableColumnConfig[]
370
+ data: any[]
371
+ }
372
+
373
+ export type QiuTableFooterMethod = (params: QiuTableFooterMethodParams) => string[][]
374
+
375
+ export interface QiuTableHeaderCell {
376
+ column: QiuTableColumnConfig & { _key: string }
377
+ label: string
378
+ colspan: number
379
+ rowspan: number
380
+ isLeaf: boolean
381
+ colIndex: number
382
+ }
383
+
384
+ export const QIU_TABLE_REGISTER_KEY = Symbol('qiuTableRegister')
385
+
386
+ export const QIU_EDITOR_TYPES = new Set([
387
+ 'switch',
388
+ 'select',
389
+ 'input',
390
+ 'number',
391
+ 'date',
392
+ 'datetime',
393
+ 'time',
394
+ 'text',
395
+ ])
396
+
397
+ export const QIU_SPECIAL_COL_TYPES = new Set(['selection', 'checkbox', 'index', 'seq', 'radio', 'expand'])
398
+
399
+ export function resolveColumnEditor(
400
+ col: Pick<QiuTableColumnConfig, 'editor' | 'type' | 'editRender'>
401
+ ): QiuTableColumnConfig['editor'] | string | undefined {
402
+ const er = resolveEditRender(col)
403
+ if (er?.enabled === false) return undefined
404
+ if (er?.name) {
405
+ if (QIU_EDITOR_TYPES.has(er.name)) return er.name as QiuTableColumnConfig['editor']
406
+ return er.name
407
+ }
408
+ return undefined
409
+ }
410
+
411
+ export function resolveColumnProp(col: QiuTableColumnConfig): string | undefined {
412
+ return col.prop || col.field
413
+ }
@@ -0,0 +1,202 @@
1
+ import { computed, ref, type Ref } from 'vue'
2
+ import type { QiuTableColumnConfig } from './types'
3
+ import { resolveColumnProp } from './types'
4
+
5
+ export type QiuTableCellPos = {
6
+ rowId: string
7
+ /** 叶子列 prop / field */
8
+ prop: string
9
+ rowIndex: number
10
+ colIndex: number
11
+ }
12
+
13
+ /**
14
+ * 键盘/剪贴板活动单元格与矩形选区
15
+ */
16
+ export function useTableArea(opts: {
17
+ getRows: () => any[]
18
+ getColumns: () => (QiuTableColumnConfig & { _key: string })[]
19
+ getRowId: (row: any) => string
20
+ }) {
21
+ const activeCell = ref<QiuTableCellPos | null>(null)
22
+ /** 选区对角(与 activeCell 组成矩形) */
23
+ const areaEnd = ref<QiuTableCellPos | null>(null)
24
+
25
+ const leafProps = () =>
26
+ opts
27
+ .getColumns()
28
+ .map((c) => resolveColumnProp(c))
29
+ .filter(Boolean) as string[]
30
+
31
+ const findPos = (rowId: string, prop: string): QiuTableCellPos | null => {
32
+ const rows = opts.getRows()
33
+ const props = leafProps()
34
+ const rowIndex = rows.findIndex((r) => opts.getRowId(r) === rowId)
35
+ const colIndex = props.indexOf(prop)
36
+ if (rowIndex < 0 || colIndex < 0) return null
37
+ return { rowId, prop, rowIndex, colIndex }
38
+ }
39
+
40
+ const setActive = (row: any, col: QiuTableColumnConfig, extend = false) => {
41
+ const prop = resolveColumnProp(col)
42
+ if (!prop) return
43
+ const pos = findPos(opts.getRowId(row), prop)
44
+ if (!pos) return
45
+ if (extend && activeCell.value) {
46
+ areaEnd.value = pos
47
+ } else {
48
+ activeCell.value = pos
49
+ areaEnd.value = null
50
+ }
51
+ }
52
+
53
+ const clearArea = () => {
54
+ activeCell.value = null
55
+ areaEnd.value = null
56
+ }
57
+
58
+ const areaBounds = computed(() => {
59
+ const a = activeCell.value
60
+ if (!a) return null
61
+ const b = areaEnd.value || a
62
+ return {
63
+ r0: Math.min(a.rowIndex, b.rowIndex),
64
+ r1: Math.max(a.rowIndex, b.rowIndex),
65
+ c0: Math.min(a.colIndex, b.colIndex),
66
+ c1: Math.max(a.colIndex, b.colIndex),
67
+ }
68
+ })
69
+
70
+ const isCellInArea = (row: any, col: QiuTableColumnConfig) => {
71
+ const bounds = areaBounds.value
72
+ if (!bounds) {
73
+ const a = activeCell.value
74
+ if (!a) return false
75
+ return opts.getRowId(row) === a.rowId && resolveColumnProp(col) === a.prop
76
+ }
77
+ const rows = opts.getRows()
78
+ const props = leafProps()
79
+ const ri = rows.findIndex((r) => opts.getRowId(r) === opts.getRowId(row))
80
+ const ci = props.indexOf(resolveColumnProp(col) || '')
81
+ if (ri < 0 || ci < 0) return false
82
+ return ri >= bounds.r0 && ri <= bounds.r1 && ci >= bounds.c0 && ci <= bounds.c1
83
+ }
84
+
85
+ const isActiveCell = (row: any, col: QiuTableColumnConfig) => {
86
+ const a = activeCell.value
87
+ if (!a) return false
88
+ return opts.getRowId(row) === a.rowId && resolveColumnProp(col) === a.prop
89
+ }
90
+
91
+ const moveActive = (dRow: number, dCol: number, extend = false) => {
92
+ const rows = opts.getRows()
93
+ const propsList = leafProps()
94
+ if (!rows.length || !propsList.length) return null
95
+ const base = (extend ? areaEnd.value : null) || activeCell.value
96
+ let ri = base?.rowIndex ?? 0
97
+ let ci = base?.colIndex ?? 0
98
+ if (base) {
99
+ ri = Math.max(0, Math.min(rows.length - 1, ri + dRow))
100
+ ci = Math.max(0, Math.min(propsList.length - 1, ci + dCol))
101
+ } else {
102
+ // 无活动格:落在起点(下/右从 0,上/左从末尾)
103
+ ri = dRow < 0 ? rows.length - 1 : 0
104
+ ci = dCol < 0 ? propsList.length - 1 : 0
105
+ }
106
+ const row = rows[ri]
107
+ const prop = propsList[ci]
108
+ const pos: QiuTableCellPos = {
109
+ rowId: opts.getRowId(row),
110
+ prop,
111
+ rowIndex: ri,
112
+ colIndex: ci,
113
+ }
114
+ if (extend && activeCell.value) {
115
+ areaEnd.value = pos
116
+ } else {
117
+ activeCell.value = pos
118
+ areaEnd.value = null
119
+ }
120
+ return { row, prop, pos }
121
+ }
122
+
123
+ /** 选区 TSV */
124
+ const buildTsv = (formatCell: (row: any, prop: string) => string) => {
125
+ const bounds = areaBounds.value
126
+ const rows = opts.getRows()
127
+ const props = leafProps()
128
+ if (!bounds) {
129
+ const a = activeCell.value
130
+ if (!a) return ''
131
+ return formatCell(rows[a.rowIndex], a.prop)
132
+ }
133
+ const lines: string[] = []
134
+ for (let r = bounds.r0; r <= bounds.r1; r++) {
135
+ const cells: string[] = []
136
+ for (let c = bounds.c0; c <= bounds.c1; c++) {
137
+ const v = formatCell(rows[r], props[c])
138
+ cells.push(String(v ?? '').replace(/\t/g, ' ').replace(/\r?\n/g, ' '))
139
+ }
140
+ lines.push(cells.join('\t'))
141
+ }
142
+ return lines.join('\n')
143
+ }
144
+
145
+ /** 从活动格起粘贴 TSV */
146
+ const pasteTsv = (
147
+ text: string,
148
+ apply: (row: any, prop: string, value: string) => void
149
+ ) => {
150
+ const a = activeCell.value
151
+ if (!a) return
152
+ const rows = opts.getRows()
153
+ const props = leafProps()
154
+ const matrix = text
155
+ .replace(/\r\n/g, '\n')
156
+ .replace(/\r/g, '\n')
157
+ .split('\n')
158
+ .filter((line, i, arr) => !(i === arr.length - 1 && line === ''))
159
+ .map((line) => line.split('\t'))
160
+ for (let r = 0; r < matrix.length; r++) {
161
+ const row = rows[a.rowIndex + r]
162
+ if (!row) break
163
+ for (let c = 0; c < matrix[r].length; c++) {
164
+ const prop = props[a.colIndex + c]
165
+ if (!prop) break
166
+ apply(row, prop, matrix[r][c])
167
+ }
168
+ }
169
+ }
170
+
171
+ const clearAreaValues = (apply: (row: any, prop: string, value: string) => void) => {
172
+ const bounds = areaBounds.value
173
+ const rows = opts.getRows()
174
+ const props = leafProps()
175
+ if (!bounds) {
176
+ const a = activeCell.value
177
+ if (!a) return
178
+ apply(rows[a.rowIndex], a.prop, '')
179
+ return
180
+ }
181
+ for (let r = bounds.r0; r <= bounds.r1; r++) {
182
+ for (let c = bounds.c0; c <= bounds.c1; c++) {
183
+ apply(rows[r], props[c], '')
184
+ }
185
+ }
186
+ }
187
+
188
+ return {
189
+ activeCell: activeCell as Ref<QiuTableCellPos | null>,
190
+ areaEnd,
191
+ areaBounds,
192
+ setActive,
193
+ clearArea,
194
+ isCellInArea,
195
+ isActiveCell,
196
+ moveActive,
197
+ buildTsv,
198
+ pasteTsv,
199
+ clearAreaValues,
200
+ findPos,
201
+ }
202
+ }