foucui 1.0.1 → 2.0.0

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 (371) hide show
  1. package/README.md +8 -8
  2. package/README.publish.md +19 -0
  3. package/dist/components/{QiuAnchor → FouAnchor}/context.d.ts +4 -4
  4. package/dist/components/{QiuBadge → FouBadge}/composables/useTableHostHeight.d.ts +1 -1
  5. package/dist/components/FouBadge/index.d.ts +18 -0
  6. package/dist/components/{QiuBadge → FouBadge}/shared/BadgeTemplateRenderer.vue.d.ts +1 -1
  7. package/dist/components/{QiuBadge → FouBadge}/shared/badgeTemplate.d.ts +1 -1
  8. package/dist/components/{QiuButton → FouButton}/index.vue.d.ts +4 -4
  9. package/dist/components/{QiuCanvasKit/QiuCanvasEditor.vue.d.ts → FouCanvasKit/FouCanvasEditor.vue.d.ts} +4 -2
  10. package/dist/components/{QiuCanvasKit → FouCanvasKit}/components/DataModulesPanel.vue.d.ts +1 -0
  11. package/dist/components/{QiuCanvasKit → FouCanvasKit}/index.d.ts +4 -4
  12. package/dist/components/{QiuCanvasKit → FouCanvasKit}/types.d.ts +1 -1
  13. package/dist/components/{QiuCarousel → FouCarousel}/context.d.ts +4 -4
  14. package/dist/components/{QiuCascader → FouCascader}/types.d.ts +7 -7
  15. package/dist/components/{QiuCheckbox → FouCheckbox}/types.d.ts +1 -1
  16. package/dist/components/{QiuCollapse → FouCollapse}/context.d.ts +2 -2
  17. package/dist/components/{QiuDescriptions → FouDescriptions}/context.d.ts +4 -4
  18. package/dist/components/{QiuDropdown → FouDropdown}/context.d.ts +2 -2
  19. package/dist/components/{QiuForm → FouForm}/types.d.ts +10 -10
  20. package/dist/components/FouLoading/index.d.ts +26 -0
  21. package/dist/components/{QiuLoading → FouLoading}/spinner.vue.d.ts +3 -3
  22. package/dist/components/{QiuLoading → FouLoading}/types.d.ts +2 -2
  23. package/dist/components/{QiuMenu → FouMenu}/context.d.ts +2 -2
  24. package/dist/components/{QiuMenuNav → FouMenuNav}/context.d.ts +2 -2
  25. package/dist/components/{QiuMsg/QiuMsgItem.vue.d.ts → FouMsg/FouMsgItem.vue.d.ts} +3 -3
  26. package/dist/components/FouMsg/index.d.ts +30 -0
  27. package/dist/components/{QiuMsg → FouMsg}/types.d.ts +5 -5
  28. package/dist/components/{QiuMsgBox → FouMsgBox}/index.d.ts +3 -3
  29. package/dist/components/{QiuNotification/QiuNotificationItem.vue.d.ts → FouNotification/FouNotificationItem.vue.d.ts} +3 -3
  30. package/dist/components/FouNotification/index.d.ts +30 -0
  31. package/dist/components/FouNotification/types.d.ts +12 -0
  32. package/dist/components/{QiuRadio → FouRadio}/types.d.ts +1 -1
  33. package/dist/components/FouRow/types.d.ts +4 -0
  34. package/dist/components/{QiuSelect → FouSelect}/index.vue.d.ts +3 -3
  35. package/dist/components/{QiuSelect → FouSelect}/types.d.ts +3 -3
  36. package/dist/components/{QiuStep → FouStep}/index.vue.d.ts +1 -1
  37. package/dist/components/{QiuSteps → FouSteps}/context.d.ts +5 -5
  38. package/dist/components/{QiuTabBar → FouTabBar}/index.vue.d.ts +3 -3
  39. package/dist/components/{QiuTabBar → FouTabBar}/types.d.ts +5 -5
  40. package/dist/components/{QiuTable → FouTable}/export.d.ts +5 -5
  41. package/dist/components/FouTable/index.d.ts +3 -0
  42. package/dist/components/{QiuTable → FouTable}/index.vue.d.ts +60 -60
  43. package/dist/components/FouTable/registry.d.ts +39 -0
  44. package/dist/components/{QiuTable → FouTable}/types.d.ts +60 -60
  45. package/dist/components/{QiuTable → FouTable}/useArea.d.ts +10 -10
  46. package/dist/components/{QiuTable → FouTable}/useColumns.d.ts +5 -5
  47. package/dist/components/FouTable/useEdit.d.ts +36 -0
  48. package/dist/components/{QiuTable → FouTable}/useHistory.d.ts +5 -5
  49. package/dist/components/{QiuTable → FouTable}/useMerge.d.ts +6 -6
  50. package/dist/components/{QiuTable → FouTable}/useScrollSync.d.ts +1 -1
  51. package/dist/components/{QiuTable → FouTable}/utils.d.ts +17 -17
  52. package/dist/components/FouTree/types.d.ts +13 -0
  53. package/dist/components/{QiuUpload → FouUpload}/index.vue.d.ts +17 -17
  54. package/dist/foucui.css +1 -1
  55. package/dist/foucui.js +10749 -10646
  56. package/dist/foucui.umd.cjs +40 -40
  57. package/dist/index.d.ts +43 -43
  58. package/dist/src/bridge/@/config/index.d.ts +1 -1
  59. package/dist/src/bridge/@fou/plugins/shortcuts.d.ts +2 -0
  60. package/package.json +27 -15
  61. package/components/QiuAffix/index.vue +0 -186
  62. package/components/QiuAlert/index.vue +0 -208
  63. package/components/QiuAnchor/context.ts +0 -18
  64. package/components/QiuAnchor/index.vue +0 -180
  65. package/components/QiuAnchorLink/index.vue +0 -67
  66. package/components/QiuApp/index.vue +0 -9
  67. package/components/QiuAutocomplete/index.vue +0 -408
  68. package/components/QiuAvatar/index.vue +0 -140
  69. package/components/QiuBacktop/index.vue +0 -121
  70. package/components/QiuBadge/api/index.ts +0 -389
  71. package/components/QiuBadge/components/BadgeImagePickerDialog.vue +0 -243
  72. package/components/QiuBadge/components/BadgeLibraryManagerDialog.vue +0 -30
  73. package/components/QiuBadge/components/BadgeLibraryPanel.vue +0 -182
  74. package/components/QiuBadge/composables/useTableHostHeight.ts +0 -53
  75. package/components/QiuBadge/index.ts +0 -18
  76. package/components/QiuBadge/shared/BadgeTemplateRenderer.vue +0 -32
  77. package/components/QiuBadge/shared/assetUrl.ts +0 -26
  78. package/components/QiuBadge/shared/badgeTemplate.ts +0 -309
  79. package/components/QiuBadge/utils/chinaAreaData.ts +0 -44
  80. package/components/QiuBadge/utils/hostRegion.ts +0 -22
  81. package/components/QiuBadge/utils/pca-code.json +0 -1
  82. package/components/QiuBadge/utils/pdfFromElement.ts +0 -348
  83. package/components/QiuBadge/views/BadgeLibraryView.vue +0 -32
  84. package/components/QiuBadge/views/BadgeManageView.vue +0 -1364
  85. package/components/QiuBadge/views/BadgeTemplateEditorView.vue +0 -10
  86. package/components/QiuBadge/views/BadgeTemplateListView.vue +0 -229
  87. package/components/QiuBadge/views/DeskLabelTemplateListView.vue +0 -227
  88. package/components/QiuBadge/views/DeskLabelView.vue +0 -683
  89. package/components/QiuBadgeDot/index.vue +0 -87
  90. package/components/QiuButton/index.vue +0 -247
  91. package/components/QiuButtonGroup/index.vue +0 -63
  92. package/components/QiuCanvasKit/QiuCanvasEditor.vue +0 -5503
  93. package/components/QiuCanvasKit/QiuCanvasRenderer.vue +0 -348
  94. package/components/QiuCanvasKit/assetUrl.ts +0 -11
  95. package/components/QiuCanvasKit/components/DataModulesPanel.vue +0 -352
  96. package/components/QiuCanvasKit/export/html.ts +0 -132
  97. package/components/QiuCanvasKit/export/pdf.ts +0 -48
  98. package/components/QiuCanvasKit/export/png.ts +0 -50
  99. package/components/QiuCanvasKit/index.ts +0 -20
  100. package/components/QiuCanvasKit/modules/badgeCompat.ts +0 -84
  101. package/components/QiuCanvasKit/modules/dataRegistry.ts +0 -207
  102. package/components/QiuCanvasKit/modules/merge.ts +0 -71
  103. package/components/QiuCanvasKit/presets/badge.ts +0 -67
  104. package/components/QiuCanvasKit/presets/banner.ts +0 -79
  105. package/components/QiuCanvasKit/types.ts +0 -138
  106. package/components/QiuCard/index.vue +0 -104
  107. package/components/QiuCarousel/context.ts +0 -16
  108. package/components/QiuCarousel/index.vue +0 -343
  109. package/components/QiuCarouselItem/index.vue +0 -47
  110. package/components/QiuCascader/index.vue +0 -879
  111. package/components/QiuCascader/types.ts +0 -48
  112. package/components/QiuCheckbox/QiuCheckboxGroup.vue +0 -78
  113. package/components/QiuCheckbox/index.vue +0 -231
  114. package/components/QiuCheckbox/types.ts +0 -8
  115. package/components/QiuCode/index.vue +0 -64
  116. package/components/QiuCol/col.scss +0 -55
  117. package/components/QiuCol/index.vue +0 -64
  118. package/components/QiuCollapse/context.ts +0 -10
  119. package/components/QiuCollapse/index.vue +0 -70
  120. package/components/QiuCollapseItem/index.vue +0 -167
  121. package/components/QiuColorField/index.vue +0 -296
  122. package/components/QiuColorPicker/README.md +0 -118
  123. package/components/QiuColorPicker/index.vue +0 -60
  124. package/components/QiuColorfulCard/index.vue +0 -101
  125. package/components/QiuCombobox/index.vue +0 -277
  126. package/components/QiuConfigProvider/index.vue +0 -31
  127. package/components/QiuContextMenu/index.vue +0 -209
  128. package/components/QiuDate/index.vue +0 -1134
  129. package/components/QiuDescriptions/context.ts +0 -20
  130. package/components/QiuDescriptions/index.vue +0 -115
  131. package/components/QiuDescriptionsItem/index.vue +0 -103
  132. package/components/QiuDialog/index.vue +0 -828
  133. package/components/QiuDigitalCard/index.vue +0 -159
  134. package/components/QiuDivider/index.vue +0 -185
  135. package/components/QiuDot/index.vue +0 -83
  136. package/components/QiuDrawer/index.vue +0 -350
  137. package/components/QiuDropdown/QiuDropdownItem.vue +0 -74
  138. package/components/QiuDropdown/QiuDropdownMenu.vue +0 -22
  139. package/components/QiuDropdown/context.ts +0 -9
  140. package/components/QiuDropdown/index.vue +0 -189
  141. package/components/QiuEmpty/index.vue +0 -73
  142. package/components/QiuForm/index.vue +0 -172
  143. package/components/QiuForm/types.ts +0 -39
  144. package/components/QiuFormItem/index.vue +0 -276
  145. package/components/QiuFullscreen/index.vue +0 -11
  146. package/components/QiuGrid/index.vue +0 -408
  147. package/components/QiuHoverCard/index.vue +0 -192
  148. package/components/QiuIcon/index.vue +0 -117
  149. package/components/QiuIconPicker/iconify.libraries.ts +0 -182
  150. package/components/QiuIconPicker/icons.catalog.ts +0 -3072
  151. package/components/QiuIconPicker/index.vue +0 -488
  152. package/components/QiuImage/index.vue +0 -177
  153. package/components/QiuInput/index.vue +0 -328
  154. package/components/QiuInputNumber/index.vue +0 -295
  155. package/components/QiuInputOtp/index.vue +0 -190
  156. package/components/QiuKbd/index.vue +0 -57
  157. package/components/QiuLayoutContainer/index.vue +0 -50
  158. package/components/QiuLinkPreview/index.vue +0 -224
  159. package/components/QiuLoading/index.ts +0 -176
  160. package/components/QiuLoading/spinner.vue +0 -820
  161. package/components/QiuLoading/types.ts +0 -44
  162. package/components/QiuMention/index.vue +0 -299
  163. package/components/QiuMenu/QiuMenuRoot.vue +0 -241
  164. package/components/QiuMenu/components/QiuMenuItem.vue +0 -340
  165. package/components/QiuMenu/components/QiuSubMenu.vue +0 -504
  166. package/components/QiuMenu/context.ts +0 -21
  167. package/components/QiuMenu/index.vue +0 -43
  168. package/components/QiuMenuNav/QiuMenuNavItem.vue +0 -100
  169. package/components/QiuMenuNav/QiuMenuNavSub.vue +0 -120
  170. package/components/QiuMenuNav/context.ts +0 -14
  171. package/components/QiuMenuNav/index.vue +0 -148
  172. package/components/QiuMsg/QiuMsgItem.vue +0 -180
  173. package/components/QiuMsg/index.ts +0 -158
  174. package/components/QiuMsg/types.ts +0 -23
  175. package/components/QiuMsgBox/index.ts +0 -147
  176. package/components/QiuNotification/QiuNotificationItem.vue +0 -168
  177. package/components/QiuNotification/index.ts +0 -155
  178. package/components/QiuNotification/types.ts +0 -14
  179. package/components/QiuPage/index.vue +0 -12
  180. package/components/QiuPageHeader/index.vue +0 -115
  181. package/components/QiuPageMain/index.vue +0 -78
  182. package/components/QiuPagination/index.vue +0 -421
  183. package/components/QiuPasswordStrength/index.vue +0 -101
  184. package/components/QiuPopconfirm/index.vue +0 -196
  185. package/components/QiuPopover/index.vue +0 -277
  186. package/components/QiuProgress/index.vue +0 -235
  187. package/components/QiuQrcode/index.vue +0 -302
  188. package/components/QiuQueryForm/components/QiuQueryFormBottomPanel.vue +0 -13
  189. package/components/QiuQueryForm/components/QiuQueryFormLeftPanel.vue +0 -37
  190. package/components/QiuQueryForm/components/QiuQueryFormRightPanel.vue +0 -37
  191. package/components/QiuQueryForm/components/QiuQueryFormTopPanel.vue +0 -13
  192. package/components/QiuQueryForm/index.vue +0 -117
  193. package/components/QiuRadio/QiuRadioGroup.vue +0 -75
  194. package/components/QiuRadio/index.vue +0 -191
  195. package/components/QiuRadio/types.ts +0 -9
  196. package/components/QiuRate/index.vue +0 -184
  197. package/components/QiuRefresh/index.vue +0 -32
  198. package/components/QiuResult/index.vue +0 -103
  199. package/components/QiuRow/index.vue +0 -60
  200. package/components/QiuRow/types.ts +0 -5
  201. package/components/QiuScrollbar/index.vue +0 -107
  202. package/components/QiuSearchBar/index.vue +0 -154
  203. package/components/QiuSegmented/index.vue +0 -120
  204. package/components/QiuSelect/QiuOption.vue +0 -93
  205. package/components/QiuSelect/index.vue +0 -452
  206. package/components/QiuSelect/types.ts +0 -15
  207. package/components/QiuSkeleton/index.vue +0 -78
  208. package/components/QiuSlider/index.vue +0 -266
  209. package/components/QiuSpace/index.vue +0 -95
  210. package/components/QiuSparkline/index.vue +0 -92
  211. package/components/QiuStatistic/index.vue +0 -4
  212. package/components/QiuStatistics/index.vue +0 -123
  213. package/components/QiuStep/index.vue +0 -220
  214. package/components/QiuSteps/context.ts +0 -25
  215. package/components/QiuSteps/index.vue +0 -84
  216. package/components/QiuSwitch/index.vue +0 -145
  217. package/components/QiuTabBar/index.vue +0 -218
  218. package/components/QiuTabBar/types.ts +0 -19
  219. package/components/QiuTabPane/index.vue +0 -82
  220. package/components/QiuTable/columns.ts +0 -16
  221. package/components/QiuTable/export.ts +0 -102
  222. package/components/QiuTable/index.ts +0 -24
  223. package/components/QiuTable/index.vue +0 -3503
  224. package/components/QiuTable/registry.ts +0 -75
  225. package/components/QiuTable/styles/table.scss +0 -1230
  226. package/components/QiuTable/types.ts +0 -413
  227. package/components/QiuTable/useArea.ts +0 -202
  228. package/components/QiuTable/useColumns.ts +0 -325
  229. package/components/QiuTable/useEdit.ts +0 -136
  230. package/components/QiuTable/useExtras.ts +0 -115
  231. package/components/QiuTable/useHistory.ts +0 -77
  232. package/components/QiuTable/useMerge.ts +0 -105
  233. package/components/QiuTable/useResize.ts +0 -86
  234. package/components/QiuTable/useScrollSync.ts +0 -152
  235. package/components/QiuTable/useVirtual.ts +0 -97
  236. package/components/QiuTable/utils.ts +0 -165
  237. package/components/QiuTableColumn/index.vue +0 -101
  238. package/components/QiuTag/index.vue +0 -143
  239. package/components/QiuText/index.vue +0 -99
  240. package/components/QiuTime/index.vue +0 -548
  241. package/components/QiuTimeAgo/index.vue +0 -103
  242. package/components/QiuTimeline/index.vue +0 -54
  243. package/components/QiuTimelineItem/index.vue +0 -140
  244. package/components/QiuTips/index.vue +0 -323
  245. package/components/QiuTooltip/index.vue +0 -237
  246. package/components/QiuTransfer/index.vue +0 -277
  247. package/components/QiuTree/QiuTreeNode.vue +0 -146
  248. package/components/QiuTree/index.vue +0 -143
  249. package/components/QiuTree/types.ts +0 -30
  250. package/components/QiuTreeSelect/index.vue +0 -259
  251. package/components/QiuTrend/index.vue +0 -92
  252. package/components/QiuUpload/index.vue +0 -628
  253. package/components/QiuUploadCrop/index.vue +0 -1267
  254. package/components/QiuWatermark/index.vue +0 -121
  255. package/components/useBodyScrollLock.ts +0 -28
  256. package/dist/components/QiuBadge/index.d.ts +0 -18
  257. package/dist/components/QiuBadge/utils/pca-code.json.d.ts +0 -3
  258. package/dist/components/QiuLoading/index.d.ts +0 -26
  259. package/dist/components/QiuMsg/index.d.ts +0 -30
  260. package/dist/components/QiuNotification/index.d.ts +0 -30
  261. package/dist/components/QiuNotification/types.d.ts +0 -12
  262. package/dist/components/QiuRow/types.d.ts +0 -4
  263. package/dist/components/QiuTable/index.d.ts +0 -3
  264. package/dist/components/QiuTable/registry.d.ts +0 -39
  265. package/dist/components/QiuTable/useEdit.d.ts +0 -36
  266. package/dist/components/QiuTree/types.d.ts +0 -13
  267. package/dist/src/bridge/@qiu/plugins/shortcuts.d.ts +0 -2
  268. package/plugins/qiu.ts +0 -83
  269. package/plugins/shortcuts.ts +0 -69
  270. package/src/bridge/@/api/media.ts +0 -8
  271. package/src/bridge/@/api/notice.ts +0 -5
  272. package/src/bridge/@/config/index.ts +0 -38
  273. package/src/bridge/@/config/media.config.ts +0 -37
  274. package/src/bridge/@/config/security.config.ts +0 -8
  275. package/src/bridge/@/i18n/index.ts +0 -6
  276. package/src/bridge/@/store/modules/bing.ts +0 -9
  277. package/src/bridge/@/store/modules/errorLog.ts +0 -9
  278. package/src/bridge/@/store/modules/media.ts +0 -10
  279. package/src/bridge/@/store/modules/routes.ts +0 -10
  280. package/src/bridge/@/store/modules/settings.ts +0 -9
  281. package/src/bridge/@/store/modules/tabs.ts +0 -9
  282. package/src/bridge/@/store/modules/user.ts +0 -9
  283. package/src/bridge/@/utils/convertToCamelCase.ts +0 -11
  284. package/src/bridge/@/utils/index.ts +0 -9
  285. package/src/bridge/@/utils/pageTitle.ts +0 -4
  286. package/src/bridge/@/utils/routes.ts +0 -14
  287. package/src/bridge/@/utils/validate.ts +0 -17
  288. package/src/bridge/@qiu/plugins/shortcuts.ts +0 -3
  289. package/src/i18n.ts +0 -8
  290. package/src/icons/qiu-logo.svg +0 -1
  291. package/styles/dark.scss +0 -194
  292. package/styles/normalize.css +0 -349
  293. package/styles/plain.scss +0 -423
  294. package/styles/qiu-tokens.scss +0 -40
  295. package/styles/qiu.scss +0 -1149
  296. package/styles/technology.scss +0 -452
  297. package/styles/var.scss +0 -382
  298. package/styles/variables.scss +0 -77
  299. /package/dist/components/{QiuAnchorLink → FouAnchorLink}/index.vue.d.ts +0 -0
  300. /package/dist/components/{QiuBadge → FouBadge}/api/index.d.ts +0 -0
  301. /package/dist/components/{QiuBadge → FouBadge}/components/BadgeImagePickerDialog.vue.d.ts +0 -0
  302. /package/dist/components/{QiuBadge → FouBadge}/components/BadgeLibraryManagerDialog.vue.d.ts +0 -0
  303. /package/dist/components/{QiuBadge → FouBadge}/components/BadgeLibraryPanel.vue.d.ts +0 -0
  304. /package/dist/components/{QiuBadge → FouBadge}/shared/assetUrl.d.ts +0 -0
  305. /package/dist/components/{QiuBadge → FouBadge}/utils/chinaAreaData.d.ts +0 -0
  306. /package/dist/components/{QiuBadge → FouBadge}/utils/hostRegion.d.ts +0 -0
  307. /package/dist/components/{QiuBadge → FouBadge}/utils/pdfFromElement.d.ts +0 -0
  308. /package/dist/components/{QiuBadge → FouBadge}/views/BadgeLibraryView.vue.d.ts +0 -0
  309. /package/dist/components/{QiuBadge → FouBadge}/views/BadgeManageView.vue.d.ts +0 -0
  310. /package/dist/components/{QiuBadge → FouBadge}/views/BadgeTemplateListView.vue.d.ts +0 -0
  311. /package/dist/components/{QiuBadge → FouBadge}/views/DeskLabelTemplateListView.vue.d.ts +0 -0
  312. /package/dist/components/{QiuBadge → FouBadge}/views/DeskLabelView.vue.d.ts +0 -0
  313. /package/dist/components/{QiuCanvasKit/QiuCanvasRenderer.vue.d.ts → FouCanvasKit/FouCanvasRenderer.vue.d.ts} +0 -0
  314. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/assetUrl.d.ts +0 -0
  315. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/export/html.d.ts +0 -0
  316. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/export/pdf.d.ts +0 -0
  317. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/export/png.d.ts +0 -0
  318. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/modules/badgeCompat.d.ts +0 -0
  319. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/modules/dataRegistry.d.ts +0 -0
  320. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/modules/merge.d.ts +0 -0
  321. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/presets/badge.d.ts +0 -0
  322. /package/dist/components/{QiuCanvasKit → FouCanvasKit}/presets/banner.d.ts +0 -0
  323. /package/dist/components/{QiuCarouselItem → FouCarouselItem}/index.vue.d.ts +0 -0
  324. /package/dist/components/{QiuCheckbox/QiuCheckboxGroup.vue.d.ts → FouCheckbox/FouCheckboxGroup.vue.d.ts} +0 -0
  325. /package/dist/components/{QiuCheckbox → FouCheckbox}/index.vue.d.ts +0 -0
  326. /package/dist/components/{QiuCode → FouCode}/index.vue.d.ts +0 -0
  327. /package/dist/components/{QiuCollapseItem → FouCollapseItem}/index.vue.d.ts +0 -0
  328. /package/dist/components/{QiuColorField → FouColorField}/index.vue.d.ts +0 -0
  329. /package/dist/components/{QiuColorPicker → FouColorPicker}/index.vue.d.ts +0 -0
  330. /package/dist/components/{QiuCombobox → FouCombobox}/index.vue.d.ts +0 -0
  331. /package/dist/components/{QiuContextMenu → FouContextMenu}/index.vue.d.ts +0 -0
  332. /package/dist/components/{QiuDescriptionsItem → FouDescriptionsItem}/index.vue.d.ts +0 -0
  333. /package/dist/components/{QiuDigitalCard → FouDigitalCard}/index.vue.d.ts +0 -0
  334. /package/dist/components/{QiuDropdown/QiuDropdownItem.vue.d.ts → FouDropdown/FouDropdownItem.vue.d.ts} +0 -0
  335. /package/dist/components/{QiuDropdown/QiuDropdownMenu.vue.d.ts → FouDropdown/FouDropdownMenu.vue.d.ts} +0 -0
  336. /package/dist/components/{QiuDropdown → FouDropdown}/index.vue.d.ts +0 -0
  337. /package/dist/components/{QiuHoverCard → FouHoverCard}/index.vue.d.ts +0 -0
  338. /package/dist/components/{QiuIcon → FouIcon}/index.vue.d.ts +0 -0
  339. /package/dist/components/{QiuIconPicker → FouIconPicker}/iconify.libraries.d.ts +0 -0
  340. /package/dist/components/{QiuIconPicker → FouIconPicker}/icons.catalog.d.ts +0 -0
  341. /package/dist/components/{QiuInput → FouInput}/index.vue.d.ts +0 -0
  342. /package/dist/components/{QiuInputNumber → FouInputNumber}/index.vue.d.ts +0 -0
  343. /package/dist/components/{QiuInputOtp → FouInputOtp}/index.vue.d.ts +0 -0
  344. /package/dist/components/{QiuKbd → FouKbd}/index.vue.d.ts +0 -0
  345. /package/dist/components/{QiuLayoutContainer → FouLayoutContainer}/index.vue.d.ts +0 -0
  346. /package/dist/components/{QiuLinkPreview → FouLinkPreview}/index.vue.d.ts +0 -0
  347. /package/dist/components/{QiuMention → FouMention}/index.vue.d.ts +0 -0
  348. /package/dist/components/{QiuMenu/QiuMenuRoot.vue.d.ts → FouMenu/FouMenuRoot.vue.d.ts} +0 -0
  349. /package/dist/components/{QiuMenuNav/QiuMenuNavItem.vue.d.ts → FouMenuNav/FouMenuNavItem.vue.d.ts} +0 -0
  350. /package/dist/components/{QiuMenuNav/QiuMenuNavSub.vue.d.ts → FouMenuNav/FouMenuNavSub.vue.d.ts} +0 -0
  351. /package/dist/components/{QiuMenuNav → FouMenuNav}/index.vue.d.ts +0 -0
  352. /package/dist/components/{QiuPageMain → FouPageMain}/index.vue.d.ts +0 -0
  353. /package/dist/components/{QiuPagination → FouPagination}/index.vue.d.ts +0 -0
  354. /package/dist/components/{QiuPasswordStrength → FouPasswordStrength}/index.vue.d.ts +0 -0
  355. /package/dist/components/{QiuQrcode → FouQrcode}/index.vue.d.ts +0 -0
  356. /package/dist/components/{QiuRadio/QiuRadioGroup.vue.d.ts → FouRadio/FouRadioGroup.vue.d.ts} +0 -0
  357. /package/dist/components/{QiuSearchBar → FouSearchBar}/index.vue.d.ts +0 -0
  358. /package/dist/components/{QiuSelect/QiuOption.vue.d.ts → FouSelect/FouOption.vue.d.ts} +0 -0
  359. /package/dist/components/{QiuSparkline → FouSparkline}/index.vue.d.ts +0 -0
  360. /package/dist/components/{QiuSwitch → FouSwitch}/index.vue.d.ts +0 -0
  361. /package/dist/components/{QiuTabPane → FouTabPane}/index.vue.d.ts +0 -0
  362. /package/dist/components/{QiuTable → FouTable}/columns.d.ts +0 -0
  363. /package/dist/components/{QiuTable → FouTable}/useExtras.d.ts +0 -0
  364. /package/dist/components/{QiuTable → FouTable}/useResize.d.ts +0 -0
  365. /package/dist/components/{QiuTable → FouTable}/useVirtual.d.ts +0 -0
  366. /package/dist/components/{QiuTime → FouTime}/index.vue.d.ts +0 -0
  367. /package/dist/components/{QiuTimeAgo → FouTimeAgo}/index.vue.d.ts +0 -0
  368. /package/dist/components/{QiuTimelineItem → FouTimelineItem}/index.vue.d.ts +0 -0
  369. /package/dist/components/{QiuTooltip → FouTooltip}/index.vue.d.ts +0 -0
  370. /package/dist/components/{QiuTrend → FouTrend}/index.vue.d.ts +0 -0
  371. /package/dist/components/{QiuUploadCrop → FouUploadCrop}/index.vue.d.ts +0 -0
@@ -1,140 +0,0 @@
1
- <template>
2
- <span
3
- class="qiu-avatar"
4
- :class="[
5
- `qiu-avatar--${shape}`,
6
- `qiu-avatar--${sizeClass}`,
7
- { 'is-image': !!src && !imgError },
8
- ]"
9
- :style="wrapStyle"
10
- >
11
- <img
12
- v-if="src && !imgError"
13
- class="qiu-avatar__img"
14
- :src="src"
15
- :alt="alt"
16
- :style="{ objectFit: fit }"
17
- @error="onError"
18
- />
19
- <span v-else-if="$slots.default" class="qiu-avatar__slot">
20
- <slot />
21
- </span>
22
- <span v-else class="qiu-avatar__text">{{ displayText }}</span>
23
- </span>
24
- </template>
25
-
26
- <script lang="ts" setup>
27
- defineOptions({ name: 'QiuAvatar' })
28
-
29
- const props = withDefaults(
30
- defineProps<{
31
- src?: string
32
- alt?: string
33
- /** large | default | small | 数字像素 */
34
- size?: 'large' | 'default' | 'small' | number
35
- shape?: 'circle' | 'square'
36
- fit?: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down'
37
- /** 无图时显示文字(默认取首字) */
38
- text?: string
39
- icon?: string
40
- }>(),
41
- {
42
- alt: '',
43
- size: 'default',
44
- shape: 'circle',
45
- fit: 'cover',
46
- text: '',
47
- }
48
- )
49
-
50
- const emit = defineEmits<{
51
- error: [Event]
52
- }>()
53
-
54
- const imgError = ref(false)
55
-
56
- watch(
57
- () => props.src,
58
- () => {
59
- imgError.value = false
60
- }
61
- )
62
-
63
- const sizeClass = computed(() =>
64
- typeof props.size === 'number' ? 'custom' : props.size
65
- )
66
-
67
- const wrapStyle = computed(() => {
68
- if (typeof props.size !== 'number') return undefined
69
- const s = `${props.size}px`
70
- return { width: s, height: s, fontSize: `${Math.max(12, props.size * 0.4)}px` }
71
- })
72
-
73
- const displayText = computed(() => {
74
- if (props.text) return props.text.slice(0, 2)
75
- return '?'
76
- })
77
-
78
- const onError = (e: Event) => {
79
- imgError.value = true
80
- emit('error', e)
81
- }
82
- </script>
83
-
84
- <style lang="scss" scoped>
85
- .qiu-avatar {
86
- box-sizing: border-box;
87
- display: inline-flex;
88
- flex-shrink: 0;
89
- align-items: center;
90
- justify-content: center;
91
- overflow: hidden;
92
- color: #fff;
93
- vertical-align: middle;
94
- background: var(--qiu-color-primary, var(--qiu-color-primary, #0f766e));
95
- user-select: none;
96
-
97
- &--circle {
98
- border-radius: 50%;
99
- }
100
-
101
- &--square {
102
- border-radius: 4px;
103
- }
104
-
105
- &--large {
106
- width: 56px;
107
- height: 56px;
108
- font-size: 22px;
109
- }
110
-
111
- &--default {
112
- width: 40px;
113
- height: 40px;
114
- font-size: 16px;
115
- }
116
-
117
- &--small {
118
- width: 28px;
119
- height: 28px;
120
- font-size: 12px;
121
- }
122
-
123
- &.is-image {
124
- background: transparent;
125
- }
126
-
127
- &__img {
128
- display: block;
129
- width: 100%;
130
- height: 100%;
131
- border-radius: inherit;
132
- }
133
-
134
- &__text,
135
- &__slot {
136
- font-weight: 600;
137
- line-height: 1;
138
- }
139
- }
140
- </style>
@@ -1,121 +0,0 @@
1
- <template>
2
- <Teleport to="body">
3
- <Transition name="qiu-backtop-fade">
4
- <button
5
- v-show="visible"
6
- type="button"
7
- class="qiu-backtop"
8
- :style="btnStyle"
9
- aria-label="回到顶部"
10
- @click="scrollToTop"
11
- >
12
- <slot>
13
- <qiu-icon icon="arrow-up-line" />
14
- </slot>
15
- </button>
16
- </Transition>
17
- </Teleport>
18
- </template>
19
-
20
- <script lang="ts" setup>
21
- defineOptions({ name: 'QiuBacktop' })
22
-
23
- const props = withDefaults(
24
- defineProps<{
25
- /** 滚动超过该高度后显示 */
26
- scrollVisibilityHeight?: number
27
- right?: number
28
- bottom?: number
29
- zIndex?: number
30
- /** 滚动容器选择器,默认 window */
31
- target?: string
32
- }>(),
33
- {
34
- scrollVisibilityHeight: 200,
35
- right: 40,
36
- bottom: 40,
37
- zIndex: 100,
38
- target: '',
39
- }
40
- )
41
-
42
- const visible = ref(false)
43
-
44
- const getScrollContainer = (): HTMLElement | Window => {
45
- if (!props.target) return window
46
- const el = document.querySelector(props.target)
47
- return (el as HTMLElement) || window
48
- }
49
-
50
- const getScrollTop = (container: HTMLElement | Window) => {
51
- if (container === window) return window.scrollY || document.documentElement.scrollTop
52
- return (container as HTMLElement).scrollTop
53
- }
54
-
55
- const btnStyle = computed(() => ({
56
- right: `${props.right}px`,
57
- bottom: `${props.bottom}px`,
58
- zIndex: String(props.zIndex),
59
- }))
60
-
61
- const onScroll = () => {
62
- const container = getScrollContainer()
63
- visible.value = getScrollTop(container) >= props.scrollVisibilityHeight
64
- }
65
-
66
- const scrollToTop = () => {
67
- const container = getScrollContainer()
68
- if (container === window) {
69
- window.scrollTo({ top: 0, behavior: 'smooth' })
70
- } else {
71
- ;(container as HTMLElement).scrollTo({ top: 0, behavior: 'smooth' })
72
- }
73
- }
74
-
75
- let containerEl: HTMLElement | Window = window
76
-
77
- onMounted(() => {
78
- containerEl = getScrollContainer()
79
- containerEl.addEventListener('scroll', onScroll, { passive: true })
80
- onScroll()
81
- })
82
-
83
- onBeforeUnmount(() => {
84
- containerEl.removeEventListener('scroll', onScroll)
85
- })
86
- </script>
87
-
88
- <style lang="scss" scoped>
89
- .qiu-backtop {
90
- position: fixed;
91
- display: inline-flex;
92
- align-items: center;
93
- justify-content: center;
94
- width: 40px;
95
- height: 40px;
96
- font-size: 18px;
97
- color: var(--qiu-color-primary, var(--qiu-color-primary, #0f766e));
98
- cursor: pointer;
99
- background: var(--qiu-bg-color, var(--qiu-bg-color, #fff));
100
- border: 1px solid var(--qiu-border-color-lighter, var(--qiu-border-color-lighter, #ebeef5));
101
- border-radius: 50%;
102
- box-shadow: var(--qiu-box-shadow-light, 0 2px 12px rgba(0, 0, 0, 0.1));
103
- transition: background 0.15s, color 0.15s;
104
-
105
- &:hover {
106
- color: #fff;
107
- background: var(--qiu-color-primary, var(--qiu-color-primary, #0f766e));
108
- }
109
- }
110
-
111
- .qiu-backtop-fade-enter-active,
112
- .qiu-backtop-fade-leave-active {
113
- transition: opacity 0.2s ease, transform 0.2s ease;
114
- }
115
-
116
- .qiu-backtop-fade-enter-from,
117
- .qiu-backtop-fade-leave-to {
118
- opacity: 0;
119
- transform: translateY(8px);
120
- }
121
- </style>
@@ -1,389 +0,0 @@
1
- /**
2
- * QiuBadge 本地演示 API(localStorage)
3
- * 先保证编辑器可独立跑通;后续再对接真实后端。
4
- */
5
- import type { BadgeTemplateDoc } from '../shared/badgeTemplate'
6
-
7
- const LS_TEMPLATES = 'qiu-badge-templates'
8
- const LS_DESK = 'qiu-badge-desk-templates'
9
- const LS_LIBRARY = 'qiu-badge-library'
10
- const LS_COMPETITIONS = 'qiu-badge-competitions'
11
-
12
- type ApiOk<T> = { code: number; data: T; msg?: string }
13
-
14
- const ok = <T>(data: T): ApiOk<T> => ({ code: 0, data })
15
-
16
- const readJson = <T>(key: string, fallback: T): T => {
17
- try {
18
- const raw = localStorage.getItem(key)
19
- if (!raw) return fallback
20
- return JSON.parse(raw) as T
21
- } catch {
22
- return fallback
23
- }
24
- }
25
-
26
- const writeJson = (key: string, value: unknown) => {
27
- localStorage.setItem(key, JSON.stringify(value))
28
- }
29
-
30
- export interface BadgeTemplateRow {
31
- id: number
32
- competition_id: number
33
- name: string
34
- width_mm: number
35
- height_mm: number
36
- is_default: boolean
37
- update_time: string
38
- doc?: BadgeTemplateDoc | null
39
- default_test_json?: Record<string, unknown> | null
40
- kind?: 'badge' | 'desk'
41
- }
42
-
43
- export interface BadgeLibraryImage {
44
- id: number
45
- url: string
46
- name: string
47
- create_time: string
48
- }
49
-
50
- const nowText = () => {
51
- const d = new Date()
52
- const p = (n: number) => String(n).padStart(2, '0')
53
- return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`
54
- }
55
-
56
- const ensureDemoCompetitions = () => {
57
- let list = readJson<any[]>(LS_COMPETITIONS, [])
58
- if (!list.length) {
59
- list = [
60
- {
61
- id: 1,
62
- name: '演示比赛 A',
63
- area_code: 'A01',
64
- host_region: '110000',
65
- start_date: '2026-08-01',
66
- status: 1,
67
- },
68
- {
69
- id: 2,
70
- name: '演示比赛 B',
71
- area_code: 'B02',
72
- host_region: '310000',
73
- start_date: '2026-09-01',
74
- status: 2,
75
- },
76
- ]
77
- writeJson(LS_COMPETITIONS, list)
78
- }
79
- return list
80
- }
81
-
82
- const listStore = (kind: 'badge' | 'desk') =>
83
- readJson<BadgeTemplateRow[]>(kind === 'badge' ? LS_TEMPLATES : LS_DESK, [])
84
-
85
- const saveStore = (kind: 'badge' | 'desk', rows: BadgeTemplateRow[]) =>
86
- writeJson(kind === 'badge' ? LS_TEMPLATES : LS_DESK, rows)
87
-
88
- const nextId = (rows: BadgeTemplateRow[]) =>
89
- rows.reduce((m, r) => Math.max(m, Number(r.id) || 0), 0) + 1
90
-
91
- const emptyDoc = (name: string, w = 90, h = 54): BadgeTemplateDoc =>
92
- ({
93
- version: 1,
94
- canvas: {
95
- widthMm: w,
96
- heightMm: h,
97
- background: '#ffffff',
98
- },
99
- elements: [],
100
- guides: [],
101
- regions: [],
102
- }) as BadgeTemplateDoc
103
-
104
- /** —— competition / template —— */
105
- export const getCompetitions = async (params?: any) => {
106
- const list = ensureDemoCompetitions()
107
- const page = Number(params?.page || 1)
108
- const pageSize = Number(params?.page_size || params?.pageSize || 20)
109
- const kw = String(params?.keyword || params?.q || '').trim()
110
- let rows = list
111
- if (kw) rows = rows.filter((r) => `${r.name}${r.area_code}`.includes(kw))
112
- const start = (page - 1) * pageSize
113
- return ok({
114
- list: rows.slice(start, start + pageSize),
115
- total: rows.length,
116
- page,
117
- page_size: pageSize,
118
- })
119
- }
120
-
121
- export const getCompetition = async (id: number) => {
122
- const row = ensureDemoCompetitions().find((r) => r.id === Number(id))
123
- return ok(row || { id, name: `比赛 ${id}`, status: 1 })
124
- }
125
-
126
- export const listBadgeTemplates = async (competitionId: number) => {
127
- const rows = listStore('badge').filter((r) => r.competition_id === Number(competitionId))
128
- return ok({ list: rows })
129
- }
130
-
131
- export const createBadgeTemplate = async (competitionId: number, data: { name: string }) => {
132
- const rows = listStore('badge')
133
- const id = nextId(rows)
134
- const row: BadgeTemplateRow = {
135
- id,
136
- competition_id: Number(competitionId),
137
- name: data.name || '未命名模板',
138
- width_mm: 90,
139
- height_mm: 54,
140
- is_default: rows.filter((r) => r.competition_id === Number(competitionId)).length === 0,
141
- update_time: nowText(),
142
- doc: emptyDoc(data.name || '未命名模板'),
143
- kind: 'badge',
144
- }
145
- rows.push(row)
146
- saveStore('badge', rows)
147
- return ok(row)
148
- }
149
-
150
- export const getBadgeTemplateOne = async (competitionId: number, templateId: number) => {
151
- const row = listStore('badge').find(
152
- (r) => r.id === Number(templateId) && r.competition_id === Number(competitionId)
153
- )
154
- if (!row) return ok(null)
155
- return ok({
156
- ...row,
157
- template_json: row.doc || emptyDoc(row.name, row.width_mm, row.height_mm),
158
- doc: row.doc || emptyDoc(row.name, row.width_mm, row.height_mm),
159
- default_test_json: row.default_test_json || {},
160
- })
161
- }
162
-
163
- export const getBadgeTemplate = async (competitionId: number) => {
164
- const rows = listStore('badge').filter((r) => r.competition_id === Number(competitionId))
165
- const row = rows.find((r) => r.is_default) || rows[0]
166
- if (!row) return ok(null)
167
- return getBadgeTemplateOne(competitionId, row.id)
168
- }
169
-
170
- export const putBadgeTemplateOne = async (
171
- competitionId: number,
172
- templateId: number,
173
- data: Record<string, unknown>
174
- ) => {
175
- const rows = listStore('badge')
176
- const idx = rows.findIndex(
177
- (r) => r.id === Number(templateId) && r.competition_id === Number(competitionId)
178
- )
179
- if (idx < 0) return ok(null)
180
- const doc = (data.doc || data.template_json || data.template || rows[idx].doc) as BadgeTemplateDoc
181
- const name = String(data.name || rows[idx].name)
182
- const width = Number((doc as any)?.canvas?.widthMm || data.width_mm || rows[idx].width_mm)
183
- const height = Number((doc as any)?.canvas?.heightMm || data.height_mm || rows[idx].height_mm)
184
- rows[idx] = {
185
- ...rows[idx],
186
- name,
187
- width_mm: width,
188
- height_mm: height,
189
- doc,
190
- default_test_json: (data.default_test_json as Record<string, unknown>) ?? rows[idx].default_test_json ?? {},
191
- update_time: nowText(),
192
- }
193
- saveStore('badge', rows)
194
- return ok(rows[idx])
195
- }
196
-
197
- export const deleteBadgeTemplate = async (competitionId: number, templateId: number) => {
198
- const rows = listStore('badge').filter(
199
- (r) => !(r.id === Number(templateId) && r.competition_id === Number(competitionId))
200
- )
201
- saveStore('badge', rows)
202
- return ok(true)
203
- }
204
-
205
- export const setDefaultBadgeTemplate = async (competitionId: number, templateId: number) => {
206
- const rows = listStore('badge').map((r) =>
207
- r.competition_id === Number(competitionId)
208
- ? { ...r, is_default: r.id === Number(templateId) }
209
- : r
210
- )
211
- saveStore('badge', rows)
212
- return ok(true)
213
- }
214
-
215
- /** desk label templates */
216
- export const listDeskLabelTemplates = async (competitionId: number) => {
217
- const rows = listStore('desk').filter((r) => r.competition_id === Number(competitionId))
218
- return ok({ list: rows })
219
- }
220
-
221
- export const createDeskLabelTemplate = async (competitionId: number, data: { name: string }) => {
222
- const rows = listStore('desk')
223
- const id = nextId(rows)
224
- const row: BadgeTemplateRow = {
225
- id,
226
- competition_id: Number(competitionId),
227
- name: data.name || '未命名桌签',
228
- width_mm: 150,
229
- height_mm: 50,
230
- is_default: rows.filter((r) => r.competition_id === Number(competitionId)).length === 0,
231
- update_time: nowText(),
232
- doc: emptyDoc(data.name || '未命名桌签', 150, 50),
233
- kind: 'desk',
234
- }
235
- rows.push(row)
236
- saveStore('desk', rows)
237
- return ok(row)
238
- }
239
-
240
- export const getDeskLabelTemplateOne = async (competitionId: number, templateId: number) => {
241
- const row = listStore('desk').find(
242
- (r) => r.id === Number(templateId) && r.competition_id === Number(competitionId)
243
- )
244
- if (!row) return ok(null)
245
- return ok({
246
- ...row,
247
- template_json: row.doc || emptyDoc(row.name, row.width_mm, row.height_mm),
248
- doc: row.doc || emptyDoc(row.name, row.width_mm, row.height_mm),
249
- default_test_json: row.default_test_json || {},
250
- })
251
- }
252
-
253
- export const getDeskLabelTemplate = async (competitionId: number) => {
254
- const rows = listStore('desk').filter((r) => r.competition_id === Number(competitionId))
255
- const row = rows.find((r) => r.is_default) || rows[0]
256
- if (!row) return ok(null)
257
- return getDeskLabelTemplateOne(competitionId, row.id)
258
- }
259
-
260
- export const putDeskLabelTemplateOne = async (
261
- competitionId: number,
262
- templateId: number,
263
- data: Record<string, unknown>
264
- ) => {
265
- const rows = listStore('desk')
266
- const idx = rows.findIndex(
267
- (r) => r.id === Number(templateId) && r.competition_id === Number(competitionId)
268
- )
269
- if (idx < 0) return ok(null)
270
- const doc = (data.doc || data.template_json || data.template || rows[idx].doc) as BadgeTemplateDoc
271
- const name = String(data.name || rows[idx].name)
272
- const width = Number((doc as any)?.canvas?.widthMm || data.width_mm || rows[idx].width_mm)
273
- const height = Number((doc as any)?.canvas?.heightMm || data.height_mm || rows[idx].height_mm)
274
- rows[idx] = {
275
- ...rows[idx],
276
- name,
277
- width_mm: width,
278
- height_mm: height,
279
- doc,
280
- default_test_json: (data.default_test_json as Record<string, unknown>) ?? rows[idx].default_test_json ?? {},
281
- update_time: nowText(),
282
- }
283
- saveStore('desk', rows)
284
- return ok(rows[idx])
285
- }
286
-
287
- export const deleteDeskLabelTemplate = async (competitionId: number, templateId: number) => {
288
- const rows = listStore('desk').filter(
289
- (r) => !(r.id === Number(templateId) && r.competition_id === Number(competitionId))
290
- )
291
- saveStore('desk', rows)
292
- return ok(true)
293
- }
294
-
295
- export const setDefaultDeskLabelTemplate = async (competitionId: number, templateId: number) => {
296
- const rows = listStore('desk').map((r) =>
297
- r.competition_id === Number(competitionId)
298
- ? { ...r, is_default: r.id === Number(templateId) }
299
- : r
300
- )
301
- saveStore('desk', rows)
302
- return ok(true)
303
- }
304
-
305
- /** —— upload / library —— */
306
- export const getBadgeLibraryImages = async (params?: { page?: number; page_size?: number }) => {
307
- const list = readJson<BadgeLibraryImage[]>(LS_LIBRARY, [])
308
- const page = Number(params?.page || 1)
309
- const pageSize = Number(params?.page_size || 40)
310
- const start = (page - 1) * pageSize
311
- return ok({ list: list.slice(start, start + pageSize), total: list.length, page, page_size: pageSize })
312
- }
313
-
314
- export const uploadBadgeLibraryImage = async (file: File) => {
315
- const url = await new Promise<string>((resolve, reject) => {
316
- const reader = new FileReader()
317
- reader.onload = () => resolve(String(reader.result || ''))
318
- reader.onerror = () => reject(new Error('read failed'))
319
- reader.readAsDataURL(file)
320
- })
321
- const list = readJson<BadgeLibraryImage[]>(LS_LIBRARY, [])
322
- const id = list.reduce((m, r) => Math.max(m, r.id), 0) + 1
323
- const row: BadgeLibraryImage = {
324
- id,
325
- url,
326
- name: file.name,
327
- create_time: nowText(),
328
- }
329
- list.unshift(row)
330
- writeJson(LS_LIBRARY, list)
331
- return ok(row)
332
- }
333
-
334
- export const deleteBadgeLibraryImage = async (id: number) => {
335
- const list = readJson<BadgeLibraryImage[]>(LS_LIBRARY, []).filter((r) => r.id !== Number(id))
336
- writeJson(LS_LIBRARY, list)
337
- return ok(true)
338
- }
339
-
340
- /** —— student / print data stubs —— */
341
- export const getBadgeSchools = async (_competitionId: number) =>
342
- ok([
343
- { id: 1, name: '演示学校一', short_name: '校一' },
344
- { id: 2, name: '演示学校二', short_name: '校二' },
345
- ])
346
-
347
- export const getBadges = async (_competitionId: number, _params?: any) =>
348
- ok({
349
- list: [
350
- {
351
- id: 1,
352
- student_name: '张三',
353
- competition_no: 'A001',
354
- school_name: '演示学校一',
355
- age_group: '小学组',
356
- competition_room: '101',
357
- seat_no: '01',
358
- },
359
- {
360
- id: 2,
361
- student_name: '李四',
362
- competition_no: 'A002',
363
- school_name: '演示学校一',
364
- age_group: '小学组',
365
- competition_room: '101',
366
- seat_no: '02',
367
- },
368
- ],
369
- total: 2,
370
- })
371
-
372
- export const getBadgesExportData = async (competitionId: number, params?: any) =>
373
- getBadges(competitionId, params)
374
-
375
- export const getStudents = async (_competitionId: number, _params?: any) =>
376
- ok({ list: [], total: 0 })
377
-
378
- export const finalizeSeatAssignmentLock = async (_competitionId: number, _data?: any) => ok(true)
379
-
380
- export const getDeskLabels = async (_competitionId: number) =>
381
- ok([
382
- {
383
- id: 1,
384
- competition_room: '101',
385
- seat_no: '01',
386
- student_name: '张三',
387
- school_name: '演示学校一',
388
- },
389
- ])