foucui 1.0.1 → 1.0.2

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 (234) hide show
  1. package/dist/components/QiuCanvasKit/QiuCanvasEditor.vue.d.ts +3 -1
  2. package/dist/components/QiuCanvasKit/components/DataModulesPanel.vue.d.ts +1 -0
  3. package/dist/components/QiuTable/index.vue.d.ts +12 -12
  4. package/dist/foucui.css +1 -1
  5. package/dist/foucui.js +7476 -7373
  6. package/dist/foucui.umd.cjs +19 -19
  7. package/package.json +23 -13
  8. package/components/QiuAffix/index.vue +0 -186
  9. package/components/QiuAlert/index.vue +0 -208
  10. package/components/QiuAnchor/context.ts +0 -18
  11. package/components/QiuAnchor/index.vue +0 -180
  12. package/components/QiuAnchorLink/index.vue +0 -67
  13. package/components/QiuApp/index.vue +0 -9
  14. package/components/QiuAutocomplete/index.vue +0 -408
  15. package/components/QiuAvatar/index.vue +0 -140
  16. package/components/QiuBacktop/index.vue +0 -121
  17. package/components/QiuBadge/api/index.ts +0 -389
  18. package/components/QiuBadge/components/BadgeImagePickerDialog.vue +0 -243
  19. package/components/QiuBadge/components/BadgeLibraryManagerDialog.vue +0 -30
  20. package/components/QiuBadge/components/BadgeLibraryPanel.vue +0 -182
  21. package/components/QiuBadge/composables/useTableHostHeight.ts +0 -53
  22. package/components/QiuBadge/index.ts +0 -18
  23. package/components/QiuBadge/shared/BadgeTemplateRenderer.vue +0 -32
  24. package/components/QiuBadge/shared/assetUrl.ts +0 -26
  25. package/components/QiuBadge/shared/badgeTemplate.ts +0 -309
  26. package/components/QiuBadge/utils/chinaAreaData.ts +0 -44
  27. package/components/QiuBadge/utils/hostRegion.ts +0 -22
  28. package/components/QiuBadge/utils/pca-code.json +0 -1
  29. package/components/QiuBadge/utils/pdfFromElement.ts +0 -348
  30. package/components/QiuBadge/views/BadgeLibraryView.vue +0 -32
  31. package/components/QiuBadge/views/BadgeManageView.vue +0 -1364
  32. package/components/QiuBadge/views/BadgeTemplateEditorView.vue +0 -10
  33. package/components/QiuBadge/views/BadgeTemplateListView.vue +0 -229
  34. package/components/QiuBadge/views/DeskLabelTemplateListView.vue +0 -227
  35. package/components/QiuBadge/views/DeskLabelView.vue +0 -683
  36. package/components/QiuBadgeDot/index.vue +0 -87
  37. package/components/QiuButton/index.vue +0 -247
  38. package/components/QiuButtonGroup/index.vue +0 -63
  39. package/components/QiuCanvasKit/QiuCanvasEditor.vue +0 -5503
  40. package/components/QiuCanvasKit/QiuCanvasRenderer.vue +0 -348
  41. package/components/QiuCanvasKit/assetUrl.ts +0 -11
  42. package/components/QiuCanvasKit/components/DataModulesPanel.vue +0 -352
  43. package/components/QiuCanvasKit/export/html.ts +0 -132
  44. package/components/QiuCanvasKit/export/pdf.ts +0 -48
  45. package/components/QiuCanvasKit/export/png.ts +0 -50
  46. package/components/QiuCanvasKit/index.ts +0 -20
  47. package/components/QiuCanvasKit/modules/badgeCompat.ts +0 -84
  48. package/components/QiuCanvasKit/modules/dataRegistry.ts +0 -207
  49. package/components/QiuCanvasKit/modules/merge.ts +0 -71
  50. package/components/QiuCanvasKit/presets/badge.ts +0 -67
  51. package/components/QiuCanvasKit/presets/banner.ts +0 -79
  52. package/components/QiuCanvasKit/types.ts +0 -138
  53. package/components/QiuCard/index.vue +0 -104
  54. package/components/QiuCarousel/context.ts +0 -16
  55. package/components/QiuCarousel/index.vue +0 -343
  56. package/components/QiuCarouselItem/index.vue +0 -47
  57. package/components/QiuCascader/index.vue +0 -879
  58. package/components/QiuCascader/types.ts +0 -48
  59. package/components/QiuCheckbox/QiuCheckboxGroup.vue +0 -78
  60. package/components/QiuCheckbox/index.vue +0 -231
  61. package/components/QiuCheckbox/types.ts +0 -8
  62. package/components/QiuCode/index.vue +0 -64
  63. package/components/QiuCol/col.scss +0 -55
  64. package/components/QiuCol/index.vue +0 -64
  65. package/components/QiuCollapse/context.ts +0 -10
  66. package/components/QiuCollapse/index.vue +0 -70
  67. package/components/QiuCollapseItem/index.vue +0 -167
  68. package/components/QiuColorField/index.vue +0 -296
  69. package/components/QiuColorPicker/README.md +0 -118
  70. package/components/QiuColorPicker/index.vue +0 -60
  71. package/components/QiuColorfulCard/index.vue +0 -101
  72. package/components/QiuCombobox/index.vue +0 -277
  73. package/components/QiuConfigProvider/index.vue +0 -31
  74. package/components/QiuContextMenu/index.vue +0 -209
  75. package/components/QiuDate/index.vue +0 -1134
  76. package/components/QiuDescriptions/context.ts +0 -20
  77. package/components/QiuDescriptions/index.vue +0 -115
  78. package/components/QiuDescriptionsItem/index.vue +0 -103
  79. package/components/QiuDialog/index.vue +0 -828
  80. package/components/QiuDigitalCard/index.vue +0 -159
  81. package/components/QiuDivider/index.vue +0 -185
  82. package/components/QiuDot/index.vue +0 -83
  83. package/components/QiuDrawer/index.vue +0 -350
  84. package/components/QiuDropdown/QiuDropdownItem.vue +0 -74
  85. package/components/QiuDropdown/QiuDropdownMenu.vue +0 -22
  86. package/components/QiuDropdown/context.ts +0 -9
  87. package/components/QiuDropdown/index.vue +0 -189
  88. package/components/QiuEmpty/index.vue +0 -73
  89. package/components/QiuForm/index.vue +0 -172
  90. package/components/QiuForm/types.ts +0 -39
  91. package/components/QiuFormItem/index.vue +0 -276
  92. package/components/QiuFullscreen/index.vue +0 -11
  93. package/components/QiuGrid/index.vue +0 -408
  94. package/components/QiuHoverCard/index.vue +0 -192
  95. package/components/QiuIcon/index.vue +0 -117
  96. package/components/QiuIconPicker/iconify.libraries.ts +0 -182
  97. package/components/QiuIconPicker/icons.catalog.ts +0 -3072
  98. package/components/QiuIconPicker/index.vue +0 -488
  99. package/components/QiuImage/index.vue +0 -177
  100. package/components/QiuInput/index.vue +0 -328
  101. package/components/QiuInputNumber/index.vue +0 -295
  102. package/components/QiuInputOtp/index.vue +0 -190
  103. package/components/QiuKbd/index.vue +0 -57
  104. package/components/QiuLayoutContainer/index.vue +0 -50
  105. package/components/QiuLinkPreview/index.vue +0 -224
  106. package/components/QiuLoading/index.ts +0 -176
  107. package/components/QiuLoading/spinner.vue +0 -820
  108. package/components/QiuLoading/types.ts +0 -44
  109. package/components/QiuMention/index.vue +0 -299
  110. package/components/QiuMenu/QiuMenuRoot.vue +0 -241
  111. package/components/QiuMenu/components/QiuMenuItem.vue +0 -340
  112. package/components/QiuMenu/components/QiuSubMenu.vue +0 -504
  113. package/components/QiuMenu/context.ts +0 -21
  114. package/components/QiuMenu/index.vue +0 -43
  115. package/components/QiuMenuNav/QiuMenuNavItem.vue +0 -100
  116. package/components/QiuMenuNav/QiuMenuNavSub.vue +0 -120
  117. package/components/QiuMenuNav/context.ts +0 -14
  118. package/components/QiuMenuNav/index.vue +0 -148
  119. package/components/QiuMsg/QiuMsgItem.vue +0 -180
  120. package/components/QiuMsg/index.ts +0 -158
  121. package/components/QiuMsg/types.ts +0 -23
  122. package/components/QiuMsgBox/index.ts +0 -147
  123. package/components/QiuNotification/QiuNotificationItem.vue +0 -168
  124. package/components/QiuNotification/index.ts +0 -155
  125. package/components/QiuNotification/types.ts +0 -14
  126. package/components/QiuPage/index.vue +0 -12
  127. package/components/QiuPageHeader/index.vue +0 -115
  128. package/components/QiuPageMain/index.vue +0 -78
  129. package/components/QiuPagination/index.vue +0 -421
  130. package/components/QiuPasswordStrength/index.vue +0 -101
  131. package/components/QiuPopconfirm/index.vue +0 -196
  132. package/components/QiuPopover/index.vue +0 -277
  133. package/components/QiuProgress/index.vue +0 -235
  134. package/components/QiuQrcode/index.vue +0 -302
  135. package/components/QiuQueryForm/components/QiuQueryFormBottomPanel.vue +0 -13
  136. package/components/QiuQueryForm/components/QiuQueryFormLeftPanel.vue +0 -37
  137. package/components/QiuQueryForm/components/QiuQueryFormRightPanel.vue +0 -37
  138. package/components/QiuQueryForm/components/QiuQueryFormTopPanel.vue +0 -13
  139. package/components/QiuQueryForm/index.vue +0 -117
  140. package/components/QiuRadio/QiuRadioGroup.vue +0 -75
  141. package/components/QiuRadio/index.vue +0 -191
  142. package/components/QiuRadio/types.ts +0 -9
  143. package/components/QiuRate/index.vue +0 -184
  144. package/components/QiuRefresh/index.vue +0 -32
  145. package/components/QiuResult/index.vue +0 -103
  146. package/components/QiuRow/index.vue +0 -60
  147. package/components/QiuRow/types.ts +0 -5
  148. package/components/QiuScrollbar/index.vue +0 -107
  149. package/components/QiuSearchBar/index.vue +0 -154
  150. package/components/QiuSegmented/index.vue +0 -120
  151. package/components/QiuSelect/QiuOption.vue +0 -93
  152. package/components/QiuSelect/index.vue +0 -452
  153. package/components/QiuSelect/types.ts +0 -15
  154. package/components/QiuSkeleton/index.vue +0 -78
  155. package/components/QiuSlider/index.vue +0 -266
  156. package/components/QiuSpace/index.vue +0 -95
  157. package/components/QiuSparkline/index.vue +0 -92
  158. package/components/QiuStatistic/index.vue +0 -4
  159. package/components/QiuStatistics/index.vue +0 -123
  160. package/components/QiuStep/index.vue +0 -220
  161. package/components/QiuSteps/context.ts +0 -25
  162. package/components/QiuSteps/index.vue +0 -84
  163. package/components/QiuSwitch/index.vue +0 -145
  164. package/components/QiuTabBar/index.vue +0 -218
  165. package/components/QiuTabBar/types.ts +0 -19
  166. package/components/QiuTabPane/index.vue +0 -82
  167. package/components/QiuTable/columns.ts +0 -16
  168. package/components/QiuTable/export.ts +0 -102
  169. package/components/QiuTable/index.ts +0 -24
  170. package/components/QiuTable/index.vue +0 -3503
  171. package/components/QiuTable/registry.ts +0 -75
  172. package/components/QiuTable/styles/table.scss +0 -1230
  173. package/components/QiuTable/types.ts +0 -413
  174. package/components/QiuTable/useArea.ts +0 -202
  175. package/components/QiuTable/useColumns.ts +0 -325
  176. package/components/QiuTable/useEdit.ts +0 -136
  177. package/components/QiuTable/useExtras.ts +0 -115
  178. package/components/QiuTable/useHistory.ts +0 -77
  179. package/components/QiuTable/useMerge.ts +0 -105
  180. package/components/QiuTable/useResize.ts +0 -86
  181. package/components/QiuTable/useScrollSync.ts +0 -152
  182. package/components/QiuTable/useVirtual.ts +0 -97
  183. package/components/QiuTable/utils.ts +0 -165
  184. package/components/QiuTableColumn/index.vue +0 -101
  185. package/components/QiuTag/index.vue +0 -143
  186. package/components/QiuText/index.vue +0 -99
  187. package/components/QiuTime/index.vue +0 -548
  188. package/components/QiuTimeAgo/index.vue +0 -103
  189. package/components/QiuTimeline/index.vue +0 -54
  190. package/components/QiuTimelineItem/index.vue +0 -140
  191. package/components/QiuTips/index.vue +0 -323
  192. package/components/QiuTooltip/index.vue +0 -237
  193. package/components/QiuTransfer/index.vue +0 -277
  194. package/components/QiuTree/QiuTreeNode.vue +0 -146
  195. package/components/QiuTree/index.vue +0 -143
  196. package/components/QiuTree/types.ts +0 -30
  197. package/components/QiuTreeSelect/index.vue +0 -259
  198. package/components/QiuTrend/index.vue +0 -92
  199. package/components/QiuUpload/index.vue +0 -628
  200. package/components/QiuUploadCrop/index.vue +0 -1267
  201. package/components/QiuWatermark/index.vue +0 -121
  202. package/components/useBodyScrollLock.ts +0 -28
  203. package/dist/components/QiuBadge/utils/pca-code.json.d.ts +0 -3
  204. package/plugins/qiu.ts +0 -83
  205. package/plugins/shortcuts.ts +0 -69
  206. package/src/bridge/@/api/media.ts +0 -8
  207. package/src/bridge/@/api/notice.ts +0 -5
  208. package/src/bridge/@/config/index.ts +0 -38
  209. package/src/bridge/@/config/media.config.ts +0 -37
  210. package/src/bridge/@/config/security.config.ts +0 -8
  211. package/src/bridge/@/i18n/index.ts +0 -6
  212. package/src/bridge/@/store/modules/bing.ts +0 -9
  213. package/src/bridge/@/store/modules/errorLog.ts +0 -9
  214. package/src/bridge/@/store/modules/media.ts +0 -10
  215. package/src/bridge/@/store/modules/routes.ts +0 -10
  216. package/src/bridge/@/store/modules/settings.ts +0 -9
  217. package/src/bridge/@/store/modules/tabs.ts +0 -9
  218. package/src/bridge/@/store/modules/user.ts +0 -9
  219. package/src/bridge/@/utils/convertToCamelCase.ts +0 -11
  220. package/src/bridge/@/utils/index.ts +0 -9
  221. package/src/bridge/@/utils/pageTitle.ts +0 -4
  222. package/src/bridge/@/utils/routes.ts +0 -14
  223. package/src/bridge/@/utils/validate.ts +0 -17
  224. package/src/bridge/@qiu/plugins/shortcuts.ts +0 -3
  225. package/src/i18n.ts +0 -8
  226. package/src/icons/qiu-logo.svg +0 -1
  227. package/styles/dark.scss +0 -194
  228. package/styles/normalize.css +0 -349
  229. package/styles/plain.scss +0 -423
  230. package/styles/qiu-tokens.scss +0 -40
  231. package/styles/qiu.scss +0 -1149
  232. package/styles/technology.scss +0 -452
  233. package/styles/var.scss +0 -382
  234. package/styles/variables.scss +0 -77
@@ -1,309 +0,0 @@
1
- /** 与后端 BadgeData 及 allowedBadgePlaceholderKeys 一致 */
2
- export const BADGE_PLACEHOLDER_KEYS = [
3
- 'competition_name',
4
- 'student_name',
5
- 'competition_no',
6
- 'school_name',
7
- 'school_short_name',
8
- 'age_group',
9
- 'competition_room',
10
- 'seat_no',
11
- 'floor',
12
- 'teacher_name',
13
- 'date',
14
- 'session',
15
- 'enroll_teacher_name',
16
- 'teacher_phone',
17
- 'signup_teacher_name',
18
- 'signup_teacher_phone',
19
- 'signup_teacher_department',
20
- 'signup_teacher_position',
21
- 'signup_teacher_id_card',
22
- 'signup_teacher_email',
23
- 'signup_teacher_username',
24
- 'venue_name',
25
- 'venue_address',
26
- 'competition_daily_start',
27
- 'competition_daily_end',
28
- ] as const
29
-
30
- export type BadgePlaceholderKey = (typeof BADGE_PLACEHOLDER_KEYS)[number]
31
-
32
- export const BADGE_PLACEHOLDER_LABELS: Record<string, string> = {
33
- competition_name: '比赛名称',
34
- student_name: '学生姓名',
35
- competition_no: '参赛编号',
36
- school_name: '学校',
37
- school_short_name: '学校简称',
38
- age_group: '年龄段',
39
- competition_room: '考场/教室',
40
- seat_no: '座位号',
41
- floor: '楼层',
42
- teacher_name: '监考教师',
43
- date: '比赛日期',
44
- session: '场次',
45
- enroll_teacher_name: '报名/带队教师(扩展)',
46
- teacher_phone: '教师手机(扩展)',
47
- signup_teacher_name: '报名教师姓名',
48
- signup_teacher_phone: '报名教师手机',
49
- signup_teacher_department: '报名教师部门',
50
- signup_teacher_position: '报名教师职务',
51
- signup_teacher_id_card: '报名教师身份证',
52
- signup_teacher_email: '报名教师邮箱',
53
- signup_teacher_username: '报名教师账号',
54
- venue_name: '场地名称',
55
- venue_address: '场地地址',
56
- competition_daily_start: '比赛当天开始时间',
57
- competition_daily_end: '比赛当天结束时间',
58
- }
59
-
60
- export interface BadgeTemplateCanvas {
61
- widthMm: number
62
- heightMm: number
63
- background?: string
64
- backgroundImage?: string
65
- /** 是否绘制画布边框(编辑/预览/打印一致) */
66
- showBorder?: boolean
67
- borderColor?: string
68
- /** 边框宽度(mm) */
69
- borderWidthMm?: number
70
- }
71
-
72
- export interface BadgeCanvasRegion {
73
- id: string
74
- name: string
75
- xMm: number
76
- yMm: number
77
- wMm: number
78
- hMm: number
79
- background?: string
80
- backgroundImage?: string
81
- }
82
-
83
- /** 元素跳转链接(Banner 热区 / 按钮形态) */
84
- export type BadgeElementLink = {
85
- href: string
86
- target?: '_blank' | '_self'
87
- }
88
-
89
- export interface BadgeTextElement {
90
- id: string
91
- type: 'text'
92
- zIndex: number
93
- xMm: number
94
- yMm: number
95
- wMm: number
96
- hMm: number
97
- rotation?: number
98
- flipX?: boolean
99
- flipY?: boolean
100
- groupId?: string
101
- regionId?: string
102
- align?: string
103
- text: string
104
- fontSize: number
105
- fontFamily: string
106
- color: string
107
- textDirection?: 'horizontal' | 'vertical'
108
- link?: BadgeElementLink
109
- }
110
-
111
- export interface BadgeImageElement {
112
- id: string
113
- type: 'image' | 'seal'
114
- zIndex: number
115
- xMm: number
116
- yMm: number
117
- wMm: number
118
- hMm: number
119
- rotation?: number
120
- flipX?: boolean
121
- flipY?: boolean
122
- groupId?: string
123
- regionId?: string
124
- align?: string
125
- src: string
126
- clipboardSource?: 'clipboard'
127
- clipboardUploadState?: 'pending' | 'uploaded'
128
- clipboardUploadKey?: string
129
- clipboardImageId?: number
130
- clipboardOrigName?: string
131
- link?: BadgeElementLink
132
- }
133
-
134
- export interface BadgeShapeElement {
135
- id: string
136
- type: 'shape'
137
- shape: 'rect' | 'circle' | 'triangle' | 'line' | 'polygon' | 'trapezoid'
138
- zIndex: number
139
- xMm: number
140
- yMm: number
141
- wMm: number
142
- hMm: number
143
- rotation?: number
144
- flipX?: boolean
145
- flipY?: boolean
146
- groupId?: string
147
- regionId?: string
148
- background?: string
149
- lockAspectRatio?: boolean
150
- showStroke?: boolean
151
- strokeColor?: string
152
- strokeWidthMm?: number
153
- opacity?: number
154
- polygonSides?: number
155
- link?: BadgeElementLink
156
- }
157
-
158
- export type BadgeElement = BadgeTextElement | BadgeImageElement | BadgeShapeElement
159
-
160
- export interface BadgeGuideLine {
161
- id: string
162
- axis: 'horizontal' | 'vertical'
163
- offsetMm: number
164
- }
165
-
166
- export interface BadgeTemplateDoc {
167
- version: number
168
- canvas: BadgeTemplateCanvas
169
- elements: BadgeElement[]
170
- guides?: BadgeGuideLine[]
171
- regions?: BadgeCanvasRegion[]
172
- /** 可选:画布级数据模块(与 QiuCanvasKit 对齐) */
173
- dataModules?: Array<{
174
- id: string
175
- label: string
176
- fields: Array<{ key: string; label: string; type?: string }>
177
- sample?: Record<string, string>
178
- builtin?: boolean
179
- enabled?: boolean
180
- }>
181
- }
182
-
183
- export function mergeBadgeText(text: string, data: Record<string, string>) {
184
- return text.replace(/\{\{\s*([a-zA-Z0-9_.]+)\s*\}\}/g, (_, k: string) => {
185
- if (k.includes('.')) {
186
- const [mod, field] = k.split('.')
187
- const nested = (data as Record<string, unknown>)[mod]
188
- if (nested && typeof nested === 'object') {
189
- const v = (nested as Record<string, string>)[field]
190
- if (v != null && v !== '') return String(v)
191
- }
192
- }
193
- const v = data[k]
194
- return v != null && v !== '' ? String(v) : ''
195
- })
196
- }
197
-
198
- /** 将接口返回的一条证件(参赛证/工作证等)记录转为占位符合并表 */
199
- export function flattenBadgeForMerge(
200
- b: Record<string, unknown>,
201
- competitionNameFallback?: string
202
- ): Record<string, string> {
203
- const cn =
204
- (b.competition_name != null ? String(b.competition_name) : '') ||
205
- (competitionNameFallback ?? '')
206
- const schoolName = String(b.school_name ?? '')
207
- const schoolShortName =
208
- String(b.school_short_name ?? b.school_name_short ?? '').trim() || deriveSchoolShortName(schoolName)
209
- return {
210
- competition_name: cn,
211
- student_name: String(b.student_name ?? ''),
212
- competition_no: String(b.competition_no ?? ''),
213
- school_name: schoolName,
214
- school_short_name: schoolShortName,
215
- age_group: String(b.age_group ?? ''),
216
- competition_room: String(b.competition_room ?? ''),
217
- seat_no: String(b.seat_no ?? ''),
218
- floor: String(b.floor ?? ''),
219
- teacher_name: String(b.teacher_name ?? ''),
220
- date: String(b.date ?? b.competition_date ?? ''),
221
- session: String(b.session ?? b.competition_session ?? ''),
222
- enroll_teacher_name: String(b.enroll_teacher_name ?? ''),
223
- teacher_phone: String(b.teacher_phone ?? ''),
224
- signup_teacher_name: String(b.signup_teacher_name ?? ''),
225
- signup_teacher_phone: String(b.signup_teacher_phone ?? ''),
226
- signup_teacher_department: String(b.signup_teacher_department ?? ''),
227
- signup_teacher_position: String(b.signup_teacher_position ?? ''),
228
- signup_teacher_id_card: String(b.signup_teacher_id_card ?? ''),
229
- signup_teacher_email: String(b.signup_teacher_email ?? ''),
230
- signup_teacher_username: String(b.signup_teacher_username ?? ''),
231
- venue_name: String(b.venue_name ?? ''),
232
- venue_address: String(b.venue_address ?? ''),
233
- competition_daily_start: String(b.competition_daily_start ?? ''),
234
- competition_daily_end: String(b.competition_daily_end ?? ''),
235
- }
236
- }
237
-
238
- function deriveSchoolShortName(schoolName: string): string {
239
- let name = String(schoolName ?? '').trim()
240
- if (!name) return ''
241
-
242
- name = name.replace(/\s+/g, '')
243
- name = name.replace(/^[中国中华人民共和國共和国]+/, '')
244
-
245
- const adminPrefix =
246
- /^(?:[^省特别行政区]+省|内蒙古自治区|广西壮族自治区|宁夏回族自治区|新疆维吾尔自治区|西藏自治区|北京市|天津市|上海市|重庆市|香港特别行政区|澳门特别行政区|台湾省|[^市]+市|[^区县旗]+区|[^区县旗]+县|[^区县旗]+旗|[^镇乡街道]+镇|[^镇乡街道]+乡|[^镇乡街道]+街道)/
247
-
248
- let stripped = true
249
- while (stripped && name) {
250
- stripped = false
251
- const next = name.replace(adminPrefix, '')
252
- if (next !== name) {
253
- name = next
254
- stripped = true
255
- }
256
- }
257
-
258
- return name || schoolName.trim()
259
- }
260
-
261
- export function sortBadgeElements(els: BadgeElement[]): BadgeElement[] {
262
- return [...els].sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0))
263
- }
264
-
265
- /** 桌面贴模板可用占位符:与参赛证保持一致,实际值由 DeskLabels 接口尽量补齐 */
266
- export const DESK_LABEL_PLACEHOLDER_KEYS = BADGE_PLACEHOLDER_KEYS
267
-
268
- export type DeskLabelPlaceholderKey = BadgePlaceholderKey
269
-
270
- export const DESK_LABEL_PLACEHOLDER_LABELS: Record<string, string> = BADGE_PLACEHOLDER_LABELS
271
-
272
- /** 单条桌面贴数据 → 与证件模板相同的合并表(未用字段留空,便于复用 BadgeTemplateRenderer) */
273
- export function flattenDeskLabelForMerge(
274
- row: Record<string, unknown>,
275
- competitionNameFallback?: string
276
- ): Record<string, string> {
277
- const cn =
278
- (row.competition_name != null ? String(row.competition_name) : '') || (competitionNameFallback ?? '')
279
- const schoolName = String(row.school_name ?? '')
280
- const schoolShortName =
281
- String(row.school_short_name ?? row.school_name_short ?? '').trim() || deriveSchoolShortName(schoolName)
282
- return {
283
- competition_name: cn,
284
- student_name: String(row.student_name ?? ''),
285
- competition_no: String(row.competition_no ?? ''),
286
- school_name: schoolName,
287
- school_short_name: schoolShortName,
288
- age_group: String(row.age_group ?? ''),
289
- competition_room: String(row.competition_room ?? ''),
290
- seat_no: String(row.seat_no ?? ''),
291
- floor: String(row.floor ?? ''),
292
- teacher_name: String(row.teacher_name ?? ''),
293
- date: String(row.date ?? row.competition_date ?? ''),
294
- session: String(row.session ?? row.competition_session ?? ''),
295
- enroll_teacher_name: String(row.enroll_teacher_name ?? ''),
296
- teacher_phone: String(row.teacher_phone ?? ''),
297
- signup_teacher_name: String(row.signup_teacher_name ?? ''),
298
- signup_teacher_phone: String(row.signup_teacher_phone ?? ''),
299
- signup_teacher_department: String(row.signup_teacher_department ?? ''),
300
- signup_teacher_position: String(row.signup_teacher_position ?? ''),
301
- signup_teacher_id_card: String(row.signup_teacher_id_card ?? ''),
302
- signup_teacher_email: String(row.signup_teacher_email ?? ''),
303
- signup_teacher_username: String(row.signup_teacher_username ?? ''),
304
- venue_name: String(row.venue_name ?? ''),
305
- venue_address: String(row.venue_address ?? ''),
306
- competition_daily_start: String(row.competition_daily_start ?? ''),
307
- competition_daily_end: String(row.competition_daily_end ?? ''),
308
- }
309
- }
@@ -1,44 +0,0 @@
1
- /**
2
- * 省市区树数据(替代 element-china-area-data)
3
- * 与旧包 API 对齐:regionData + codeToText,供 QiuBadge 赛区树使用。
4
- * 使用本地 pca-code.json,避免 Vite 解析 china-division 包入口失败。
5
- *
6
- * @author qiuye
7
- * @email yjk150@qq.com
8
- * @date 2026-08-16
9
- */
10
- import pcaCJson from './pca-code.json'
11
-
12
- export interface ChinaAreaNode {
13
- value: string
14
- label: string
15
- children?: ChinaAreaNode[]
16
- }
17
-
18
- interface PcaCodeNode {
19
- code: string | number
20
- name: string
21
- children?: PcaCodeNode[]
22
- }
23
-
24
- function mapNode(n: PcaCodeNode): ChinaAreaNode {
25
- return {
26
- value: String(n.code),
27
- label: String(n.name || ''),
28
- children: n.children?.length ? n.children.map(mapNode) : undefined,
29
- }
30
- }
31
-
32
- /** 与 element-china-area-data 的 regionData 同形 */
33
- export const regionData: ChinaAreaNode[] = (pcaCJson as PcaCodeNode[]).map(mapNode)
34
-
35
- /** code → 中文名 */
36
- export const codeToText: Record<string, string> = {}
37
-
38
- function walk(nodes: ChinaAreaNode[]) {
39
- for (const n of nodes) {
40
- codeToText[n.value] = n.label
41
- if (n.children?.length) walk(n.children)
42
- }
43
- }
44
- walk(regionData)
@@ -1,22 +0,0 @@
1
- /** host_region 存省市区 code 的 JSON 数组字符串,如 ["110000","110100","110105"];旧数据为纯文本则原样展示 */
2
-
3
- export function parseHostRegionCodes(raw: unknown): string[] {
4
- if (raw == null) return []
5
- const s = String(raw).trim()
6
- if (!s) return []
7
- try {
8
- const a = JSON.parse(s)
9
- if (Array.isArray(a)) return a.map(String).filter(Boolean)
10
- } catch {
11
- /* 旧版手填 */
12
- }
13
- return []
14
- }
15
-
16
- export function formatHostRegionLabel(raw: unknown, codeToText: Record<string, string>): string {
17
- const codes = parseHostRegionCodes(raw)
18
- if (codes.length) {
19
- return codes.map((c) => codeToText[c] || c).filter(Boolean).join(' / ')
20
- }
21
- return String(raw ?? '').trim()
22
- }