@tplc/wot 1.0.6 → 1.0.8

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 (518) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/components/common/AbortablePromise.ts +3 -11
  3. package/components/common/abstracts/_config.scss +1 -1
  4. package/components/common/abstracts/_function.scss +26 -13
  5. package/components/common/abstracts/_mixin.scss +117 -71
  6. package/components/common/abstracts/variable.scss +325 -697
  7. package/components/common/base64.ts +1 -2
  8. package/components/common/canvasHelper.ts +1 -1
  9. package/components/common/interceptor.ts +43 -0
  10. package/components/common/props.ts +8 -8
  11. package/components/common/util.ts +145 -60
  12. package/components/composables/index.ts +11 -0
  13. package/components/composables/useChildren.ts +9 -18
  14. package/components/composables/useCountDown.ts +2 -2
  15. package/components/composables/useLockScroll.ts +1 -3
  16. package/components/composables/useParent.ts +4 -4
  17. package/components/composables/usePopover.ts +43 -60
  18. package/components/composables/useQueue.ts +2 -2
  19. package/components/composables/useTouch.ts +2 -3
  20. package/components/composables/useTranslate.ts +2 -13
  21. package/components/composables/useUpload.ts +389 -0
  22. package/components/wd-action-sheet/index.scss +22 -22
  23. package/components/wd-action-sheet/types.ts +11 -21
  24. package/components/wd-action-sheet/wd-action-sheet.vue +21 -40
  25. package/components/wd-backtop/index.scss +5 -5
  26. package/components/wd-backtop/types.ts +3 -15
  27. package/components/wd-backtop/wd-backtop.vue +12 -20
  28. package/components/wd-badge/index.scss +14 -10
  29. package/components/wd-badge/types.ts +6 -9
  30. package/components/wd-badge/wd-badge.vue +29 -37
  31. package/components/wd-button/index.scss +76 -80
  32. package/components/wd-button/types.ts +43 -13
  33. package/components/wd-button/wd-button.vue +41 -22
  34. package/components/wd-calendar/index.scss +58 -145
  35. package/components/wd-calendar/types.ts +23 -41
  36. package/components/wd-calendar/wd-calendar.vue +123 -130
  37. package/components/wd-calendar-view/month/index.scss +33 -65
  38. package/components/wd-calendar-view/month/month.vue +80 -113
  39. package/components/wd-calendar-view/month/types.ts +2 -1
  40. package/components/wd-calendar-view/monthPanel/index.scss +15 -15
  41. package/components/wd-calendar-view/monthPanel/month-panel.vue +64 -78
  42. package/components/wd-calendar-view/monthPanel/types.ts +58 -10
  43. package/components/wd-calendar-view/types.ts +12 -36
  44. package/components/wd-calendar-view/utils.ts +14 -36
  45. package/components/wd-calendar-view/wd-calendar-view.vue +7 -7
  46. package/components/wd-calendar-view/year/index.scss +18 -13
  47. package/components/wd-calendar-view/year/types.ts +2 -1
  48. package/components/wd-calendar-view/year/year.vue +25 -43
  49. package/components/wd-calendar-view/yearPanel/index.scss +4 -4
  50. package/components/wd-calendar-view/yearPanel/types.ts +2 -2
  51. package/components/wd-calendar-view/yearPanel/year-panel.vue +36 -41
  52. package/components/wd-card/index.scss +11 -10
  53. package/components/wd-card/types.ts +1 -1
  54. package/components/wd-card/wd-card.vue +6 -9
  55. package/components/wd-cell/index.scss +56 -41
  56. package/components/wd-cell/types.ts +23 -8
  57. package/components/wd-cell/wd-cell.vue +48 -18
  58. package/components/wd-cell-group/index.scss +8 -7
  59. package/components/wd-cell-group/types.ts +1 -1
  60. package/components/wd-cell-group/wd-cell-group.vue +5 -5
  61. package/components/wd-checkbox/index.scss +35 -35
  62. package/components/wd-checkbox/types.ts +6 -6
  63. package/components/wd-checkbox/wd-checkbox.vue +12 -20
  64. package/components/wd-checkbox-group/index.scss +4 -4
  65. package/components/wd-checkbox-group/types.ts +2 -2
  66. package/components/wd-checkbox-group/wd-checkbox-group.vue +9 -12
  67. package/components/wd-circle/index.scss +5 -5
  68. package/components/wd-circle/types.ts +2 -2
  69. package/components/wd-circle/wd-circle.vue +18 -40
  70. package/components/wd-col/index.scss +2 -2
  71. package/components/wd-col/types.ts +1 -1
  72. package/components/wd-col/wd-col.vue +11 -53
  73. package/components/wd-col-picker/index.scss +41 -115
  74. package/components/wd-col-picker/types.ts +10 -14
  75. package/components/wd-col-picker/wd-col-picker.vue +103 -155
  76. package/components/wd-collapse/index.scss +7 -13
  77. package/components/wd-collapse/types.ts +4 -10
  78. package/components/wd-collapse/wd-collapse.vue +22 -55
  79. package/components/wd-collapse-item/index.scss +16 -5
  80. package/components/wd-collapse-item/types.ts +14 -2
  81. package/components/wd-collapse-item/wd-collapse-item.vue +70 -81
  82. package/components/wd-config-provider/types.ts +69 -40
  83. package/components/wd-config-provider/wd-config-provider.vue +11 -11
  84. package/components/wd-count-down/index.scss +3 -2
  85. package/components/wd-count-down/types.ts +1 -1
  86. package/components/wd-count-down/wd-count-down.vue +5 -5
  87. package/components/wd-count-to/index.scss +2 -1
  88. package/components/wd-count-to/types.ts +10 -3
  89. package/components/wd-count-to/wd-count-to.vue +9 -18
  90. package/components/wd-curtain/index.scss +28 -23
  91. package/components/wd-curtain/types.ts +46 -9
  92. package/components/wd-curtain/wd-curtain.vue +45 -47
  93. package/components/wd-datetime-picker/index.scss +65 -145
  94. package/components/wd-datetime-picker/types.ts +41 -31
  95. package/components/wd-datetime-picker/wd-datetime-picker.vue +307 -333
  96. package/components/wd-datetime-picker-view/types.ts +29 -46
  97. package/components/wd-datetime-picker-view/util.ts +30 -0
  98. package/components/wd-datetime-picker-view/wd-datetime-picker-view.vue +104 -119
  99. package/components/wd-divider/index.scss +78 -10
  100. package/components/wd-divider/types.ts +26 -3
  101. package/components/wd-divider/wd-divider.vue +33 -10
  102. package/components/wd-drop-menu/index.scss +17 -45
  103. package/components/wd-drop-menu/types.ts +3 -3
  104. package/components/wd-drop-menu/wd-drop-menu.vue +61 -25
  105. package/components/wd-drop-menu-item/index.scss +15 -15
  106. package/components/wd-drop-menu-item/types.ts +18 -15
  107. package/components/wd-drop-menu-item/wd-drop-menu-item.vue +33 -54
  108. package/components/wd-fab/index.scss +13 -12
  109. package/components/wd-fab/types.ts +9 -4
  110. package/components/wd-fab/wd-fab.vue +70 -51
  111. package/components/wd-floating-panel/index.scss +64 -0
  112. package/components/wd-floating-panel/type.ts +32 -0
  113. package/components/wd-floating-panel/wd-floating-panel.vue +140 -0
  114. package/components/wd-form/types.ts +8 -16
  115. package/components/wd-form/wd-form.vue +67 -45
  116. package/components/wd-form-item/index.scss +3 -2
  117. package/components/wd-form-item/types.ts +2 -8
  118. package/components/wd-form-item/wd-form-item.vue +3 -3
  119. package/components/wd-grid/index.scss +2 -2
  120. package/components/wd-grid/types.ts +5 -0
  121. package/components/wd-grid/wd-grid.vue +11 -12
  122. package/components/wd-grid-item/index.scss +44 -33
  123. package/components/wd-grid-item/types.ts +7 -4
  124. package/components/wd-grid-item/wd-grid-item.vue +39 -44
  125. package/components/wd-icon/index.scss +311 -303
  126. package/components/wd-icon/types.ts +3 -3
  127. package/components/wd-icon/wd-icon.vue +6 -6
  128. package/components/wd-img/types.ts +1 -1
  129. package/components/wd-img/wd-img.vue +13 -3
  130. package/components/wd-img-cropper/index.scss +43 -39
  131. package/components/wd-img-cropper/types.ts +6 -8
  132. package/components/wd-img-cropper/wd-img-cropper.vue +132 -127
  133. package/components/wd-index-anchor/index.scss +7 -6
  134. package/components/wd-index-anchor/type.ts +2 -2
  135. package/components/wd-index-anchor/wd-index-anchor.vue +3 -9
  136. package/components/wd-index-bar/index.scss +5 -5
  137. package/components/wd-index-bar/type.ts +3 -2
  138. package/components/wd-index-bar/wd-index-bar.vue +15 -51
  139. package/components/wd-input/index.scss +44 -33
  140. package/components/wd-input/types.ts +40 -19
  141. package/components/wd-input/wd-input.vue +58 -42
  142. package/components/wd-input-number/index.scss +23 -31
  143. package/components/wd-input-number/types.ts +42 -14
  144. package/components/wd-input-number/wd-input-number.vue +374 -141
  145. package/components/wd-keyboard/constants.ts +81 -0
  146. package/components/wd-keyboard/index.scss +102 -0
  147. package/components/wd-keyboard/key/index.scss +79 -0
  148. package/components/wd-keyboard/key/index.vue +71 -0
  149. package/components/wd-keyboard/key/types.ts +11 -0
  150. package/components/wd-keyboard/types.ts +92 -0
  151. package/components/wd-keyboard/wd-keyboard.vue +206 -0
  152. package/components/wd-loading/index.scss +9 -6
  153. package/components/wd-loading/types.ts +1 -1
  154. package/components/wd-loading/wd-loading.vue +9 -9
  155. package/components/wd-loadmore/index.scss +5 -5
  156. package/components/wd-loadmore/types.ts +8 -2
  157. package/components/wd-loadmore/wd-loadmore.vue +28 -13
  158. package/components/wd-message-box/index.scss +21 -34
  159. package/components/wd-message-box/index.ts +30 -29
  160. package/components/wd-message-box/types.ts +33 -8
  161. package/components/wd-message-box/wd-message-box.vue +130 -152
  162. package/components/wd-navbar/index.scss +14 -24
  163. package/components/wd-navbar/types.ts +1 -1
  164. package/components/wd-navbar/wd-navbar.vue +14 -45
  165. package/components/wd-navbar-capsule/index.scss +16 -15
  166. package/components/wd-navbar-capsule/types.ts +8 -0
  167. package/components/wd-navbar-capsule/wd-navbar-capsule.vue +8 -4
  168. package/components/wd-notice-bar/index.scss +15 -33
  169. package/components/wd-notice-bar/types.ts +14 -3
  170. package/components/wd-notice-bar/wd-notice-bar.vue +109 -66
  171. package/components/wd-notify/index.scss +5 -5
  172. package/components/wd-notify/index.ts +17 -15
  173. package/components/wd-notify/types.ts +4 -0
  174. package/components/wd-notify/wd-notify.vue +21 -19
  175. package/components/wd-number-keyboard/index.scss +10 -10
  176. package/components/wd-number-keyboard/key/index.scss +7 -5
  177. package/components/wd-number-keyboard/key/index.vue +6 -9
  178. package/components/wd-number-keyboard/key/types.ts +1 -1
  179. package/components/wd-number-keyboard/types.ts +4 -0
  180. package/components/wd-number-keyboard/wd-number-keyboard.vue +22 -44
  181. package/components/wd-overlay/index.scss +3 -3
  182. package/components/wd-overlay/types.ts +2 -2
  183. package/components/wd-overlay/wd-overlay.vue +7 -15
  184. package/components/wd-pagination/index.scss +17 -17
  185. package/components/wd-pagination/types.ts +1 -1
  186. package/components/wd-pagination/wd-pagination.vue +10 -21
  187. package/components/wd-password-input/index.scss +7 -6
  188. package/components/wd-password-input/types.ts +2 -8
  189. package/components/wd-password-input/wd-password-input.vue +6 -15
  190. package/components/wd-picker/index.scss +46 -153
  191. package/components/wd-picker/types.ts +22 -19
  192. package/components/wd-picker/wd-picker.vue +89 -86
  193. package/components/wd-picker-view/index.scss +13 -12
  194. package/components/wd-picker-view/types.ts +16 -26
  195. package/components/wd-picker-view/wd-picker-view.vue +32 -24
  196. package/components/wd-popover/index.scss +29 -36
  197. package/components/wd-popover/types.ts +1 -1
  198. package/components/wd-popover/wd-popover.vue +20 -56
  199. package/components/wd-popup/index.scss +47 -75
  200. package/components/wd-popup/types.ts +40 -4
  201. package/components/wd-popup/wd-popup.vue +100 -157
  202. package/components/wd-progress/index.scss +20 -14
  203. package/components/wd-progress/types.ts +10 -6
  204. package/components/wd-progress/wd-progress.vue +137 -141
  205. package/components/wd-radio/index.scss +54 -53
  206. package/components/wd-radio/types.ts +15 -6
  207. package/components/wd-radio/wd-radio.vue +41 -59
  208. package/components/wd-radio-group/index.scss +5 -5
  209. package/components/wd-radio-group/types.ts +4 -1
  210. package/components/wd-radio-group/wd-radio-group.vue +6 -9
  211. package/components/wd-rate/index.scss +1 -1
  212. package/components/wd-rate/types.ts +10 -5
  213. package/components/wd-rate/wd-rate.vue +35 -17
  214. package/components/wd-resize/index.scss +2 -1
  215. package/components/wd-resize/types.ts +1 -1
  216. package/components/wd-resize/wd-resize.vue +11 -22
  217. package/components/wd-root-portal/wd-root-portal.vue +50 -0
  218. package/components/wd-row/index.scss +1 -1
  219. package/components/wd-row/types.ts +1 -1
  220. package/components/wd-row/wd-row.vue +14 -35
  221. package/components/wd-search/index.scss +29 -29
  222. package/components/wd-search/types.ts +22 -3
  223. package/components/wd-search/wd-search.vue +70 -120
  224. package/components/wd-segmented/index.scss +19 -15
  225. package/components/wd-segmented/types.ts +16 -4
  226. package/components/wd-segmented/wd-segmented.vue +34 -34
  227. package/components/wd-select-picker/index.scss +55 -122
  228. package/components/wd-select-picker/types.ts +29 -36
  229. package/components/wd-select-picker/wd-select-picker.vue +128 -274
  230. package/components/wd-sidebar/index.scss +5 -5
  231. package/components/wd-sidebar/types.ts +22 -3
  232. package/components/wd-sidebar/wd-sidebar.vue +26 -4
  233. package/components/wd-sidebar-item/index.scss +17 -13
  234. package/components/wd-sidebar-item/types.ts +3 -3
  235. package/components/wd-sidebar-item/wd-sidebar-item.vue +12 -10
  236. package/components/wd-signature/index.scss +31 -0
  237. package/components/wd-signature/types.ts +263 -0
  238. package/components/wd-signature/wd-signature.vue +630 -0
  239. package/components/wd-skeleton/index.scss +8 -13
  240. package/components/wd-skeleton/types.ts +6 -6
  241. package/components/wd-skeleton/wd-skeleton.vue +15 -31
  242. package/components/wd-slider/index.scss +24 -17
  243. package/components/wd-slider/types.ts +45 -17
  244. package/components/wd-slider/wd-slider.vue +275 -297
  245. package/components/wd-sort-button/index.scss +10 -7
  246. package/components/wd-sort-button/types.ts +1 -1
  247. package/components/wd-sort-button/wd-sort-button.vue +7 -14
  248. package/components/wd-status-tip/index.scss +8 -8
  249. package/components/wd-status-tip/types.ts +8 -2
  250. package/components/wd-status-tip/wd-status-tip.vue +14 -37
  251. package/components/wd-step/index.scss +29 -30
  252. package/components/wd-step/types.ts +1 -1
  253. package/components/wd-step/wd-step.vue +8 -9
  254. package/components/wd-steps/index.scss +1 -1
  255. package/components/wd-steps/types.ts +1 -1
  256. package/components/wd-steps/wd-steps.vue +5 -5
  257. package/components/wd-sticky/index.scss +1 -1
  258. package/components/wd-sticky/types.ts +1 -1
  259. package/components/wd-sticky/wd-sticky.vue +21 -29
  260. package/components/wd-sticky-box/index.scss +1 -1
  261. package/components/wd-sticky-box/wd-sticky-box.vue +7 -6
  262. package/components/wd-swipe-action/index.scss +1 -1
  263. package/components/wd-swipe-action/types.ts +2 -5
  264. package/components/wd-swipe-action/wd-swipe-action.vue +9 -22
  265. package/components/wd-swiper-nav/index.scss +22 -16
  266. package/components/wd-swiper-nav/types.ts +1 -9
  267. package/components/wd-swiper-nav/wd-swiper-nav.vue +2 -5
  268. package/components/wd-switch/index.scss +15 -15
  269. package/components/wd-switch/types.ts +8 -6
  270. package/components/wd-switch/wd-switch.vue +15 -15
  271. package/components/wd-tab/index.scss +11 -3
  272. package/components/wd-tab/types.ts +11 -1
  273. package/components/wd-tab/wd-tab.vue +28 -36
  274. package/components/wd-tabbar/index.scss +12 -7
  275. package/components/wd-tabbar/types.ts +3 -18
  276. package/components/wd-tabbar/wd-tabbar.vue +10 -23
  277. package/components/wd-tabbar-item/index.scss +15 -12
  278. package/components/wd-tabbar-item/types.ts +3 -3
  279. package/components/wd-tabbar-item/wd-tabbar-item.vue +11 -13
  280. package/components/wd-table/index.scss +40 -9
  281. package/components/wd-table/types.ts +13 -15
  282. package/components/wd-table/wd-table.vue +123 -94
  283. package/components/wd-table-col/index.scss +6 -4
  284. package/components/wd-table-col/types.ts +1 -1
  285. package/components/wd-table-col/wd-table-col.vue +12 -12
  286. package/components/wd-tag/index.scss +19 -19
  287. package/components/wd-tag/types.ts +1 -1
  288. package/components/wd-tag/wd-tag.vue +14 -20
  289. package/components/wd-text/index.scss +4 -1
  290. package/components/wd-text/types.ts +4 -4
  291. package/components/wd-text/wd-text.vue +12 -11
  292. package/components/wd-textarea/index.scss +51 -41
  293. package/components/wd-textarea/types.ts +24 -34
  294. package/components/wd-textarea/wd-textarea.vue +59 -66
  295. package/components/wd-toast/index.scss +31 -18
  296. package/components/wd-toast/index.ts +26 -43
  297. package/components/wd-toast/types.ts +117 -3
  298. package/components/wd-toast/wd-toast.vue +49 -69
  299. package/components/wd-tooltip/index.scss +21 -16
  300. package/components/wd-tooltip/types.ts +8 -3
  301. package/components/wd-tooltip/wd-tooltip.vue +17 -43
  302. package/components/wd-tour/index.scss +123 -0
  303. package/components/wd-tour/types.ts +153 -0
  304. package/components/wd-tour/wd-tour.vue +509 -0
  305. package/components/wd-transition/index.scss +39 -35
  306. package/components/wd-transition/types.ts +27 -9
  307. package/components/wd-transition/wd-transition.vue +45 -34
  308. package/components/wd-upload/index.scss +23 -21
  309. package/components/wd-upload/types.ts +43 -30
  310. package/components/wd-upload/wd-upload.vue +183 -247
  311. package/components/wd-video-preview/index.scss +9 -9
  312. package/components/wd-video-preview/types.ts +1 -1
  313. package/components/wd-video-preview/wd-video-preview.vue +18 -22
  314. package/components/wd-watermark/index.scss +7 -7
  315. package/components/wd-watermark/types.ts +2 -8
  316. package/components/wd-watermark/wd-watermark.vue +38 -135
  317. package/dayjs/constant.js +26 -0
  318. package/dayjs/index.d.ts +430 -0
  319. package/dayjs/index.js +542 -0
  320. package/dayjs/locale/en.js +13 -0
  321. package/dayjs/utils.js +59 -0
  322. package/global.d.ts +97 -91
  323. package/index.ts +2 -10
  324. package/locale/index.ts +3 -15
  325. package/locale/lang/ar-SA.ts +133 -0
  326. package/locale/lang/de-DE.ts +133 -0
  327. package/locale/lang/en-US.ts +31 -26
  328. package/locale/lang/es-ES.ts +133 -0
  329. package/locale/lang/fr-FR.ts +133 -0
  330. package/locale/lang/ja-JP.ts +133 -0
  331. package/locale/lang/ko-KR.ts +133 -0
  332. package/locale/lang/pt-PT.ts +133 -0
  333. package/locale/lang/ru-RU.ts +133 -0
  334. package/locale/lang/th-TH.ts +28 -22
  335. package/locale/lang/tr-TR.ts +138 -0
  336. package/locale/lang/ug-CN.ts +137 -0
  337. package/locale/lang/vi-VN.ts +27 -30
  338. package/locale/lang/zh-CN.ts +32 -22
  339. package/locale/lang/zh-HK.ts +18 -31
  340. package/locale/lang/zh-TW.ts +22 -31
  341. package/package.json +1 -1
  342. package/types/components/common/interceptor.d.ts +15 -0
  343. package/types/components/common/util.d.ts +61 -1
  344. package/types/components/composables/useCell.d.ts +1 -1
  345. package/types/components/composables/useLockScroll.d.ts +1 -2
  346. package/types/components/composables/useParent.d.ts +1 -1
  347. package/types/components/composables/usePopover.d.ts +2 -2
  348. package/types/components/composables/useUpload.d.ts +41 -0
  349. package/types/components/wd-action-sheet/types.d.ts +13 -4
  350. package/types/components/wd-action-sheet/wd-action-sheet.vue.d.ts +20 -11
  351. package/types/components/wd-backtop/types.d.ts +1 -9
  352. package/types/components/wd-backtop/wd-backtop.vue.d.ts +6 -25
  353. package/types/components/wd-badge/types.d.ts +3 -6
  354. package/types/components/wd-badge/wd-badge.vue.d.ts +7 -14
  355. package/types/components/wd-button/types.d.ts +44 -8
  356. package/types/components/wd-button/wd-button.vue.d.ts +13 -9
  357. package/types/components/wd-calendar/types.d.ts +24 -18
  358. package/types/components/wd-calendar/wd-calendar.vue.d.ts +48 -32
  359. package/types/components/wd-calendar-view/month/month.vue.d.ts +11 -3
  360. package/types/components/wd-calendar-view/month/types.d.ts +4 -0
  361. package/types/components/wd-calendar-view/monthPanel/month-panel.vue.d.ts +18 -12
  362. package/types/components/wd-calendar-view/monthPanel/types.d.ts +48 -6
  363. package/types/components/wd-calendar-view/types.d.ts +11 -4
  364. package/types/components/wd-calendar-view/utils.d.ts +3 -12
  365. package/types/components/wd-calendar-view/wd-calendar-view.vue.d.ts +1 -1
  366. package/types/components/wd-calendar-view/year/types.d.ts +4 -0
  367. package/types/components/wd-calendar-view/year/year.vue.d.ts +11 -3
  368. package/types/components/wd-cell/types.d.ts +37 -1
  369. package/types/components/wd-cell/wd-cell.vue.d.ts +53 -9
  370. package/types/components/wd-checkbox/wd-checkbox.vue.d.ts +2 -2
  371. package/types/components/wd-checkbox-group/wd-checkbox-group.vue.d.ts +2 -2
  372. package/types/components/wd-circle/wd-circle.vue.d.ts +3 -3
  373. package/types/components/wd-col-picker/types.d.ts +14 -0
  374. package/types/components/wd-col-picker/wd-col-picker.vue.d.ts +36 -19
  375. package/types/components/wd-collapse/types.d.ts +1 -5
  376. package/types/components/wd-collapse/wd-collapse.vue.d.ts +3 -11
  377. package/types/components/wd-collapse-item/types.d.ts +19 -1
  378. package/types/components/wd-collapse-item/wd-collapse-item.vue.d.ts +20 -1
  379. package/types/components/wd-config-provider/types.d.ts +64 -7
  380. package/types/components/wd-config-provider/wd-config-provider.vue.d.ts +1 -1
  381. package/types/components/wd-count-to/types.d.ts +11 -0
  382. package/types/components/wd-count-to/wd-count-to.vue.d.ts +13 -4
  383. package/types/components/wd-curtain/types.d.ts +56 -0
  384. package/types/components/wd-curtain/wd-curtain.vue.d.ts +152 -77
  385. package/types/components/wd-datetime-picker/types.d.ts +49 -15
  386. package/types/components/wd-datetime-picker/wd-datetime-picker.vue.d.ts +75 -38
  387. package/types/components/wd-datetime-picker-view/types.d.ts +36 -14
  388. package/types/components/wd-datetime-picker-view/util.d.ts +12 -0
  389. package/types/components/wd-datetime-picker-view/wd-datetime-picker-view.vue.d.ts +35 -9
  390. package/types/components/wd-divider/types.d.ts +32 -4
  391. package/types/components/wd-divider/wd-divider.vue.d.ts +30 -7
  392. package/types/components/wd-drop-menu/types.d.ts +3 -3
  393. package/types/components/wd-drop-menu/wd-drop-menu.vue.d.ts +8 -8
  394. package/types/components/wd-drop-menu-item/types.d.ts +27 -15
  395. package/types/components/wd-drop-menu-item/wd-drop-menu-item.vue.d.ts +47 -36
  396. package/types/components/wd-fab/types.d.ts +19 -3
  397. package/types/components/wd-fab/wd-fab.vue.d.ts +13 -1
  398. package/types/components/wd-floating-panel/type.d.ts +54 -0
  399. package/types/components/wd-floating-panel/wd-floating-panel.vue.d.ts +109 -0
  400. package/types/components/wd-form/types.d.ts +1 -1
  401. package/types/components/wd-form/wd-form.vue.d.ts +2 -2
  402. package/types/components/wd-form-item/wd-form-item.vue.d.ts +2 -2
  403. package/types/components/wd-grid/types.d.ts +5 -0
  404. package/types/components/wd-grid/wd-grid.vue.d.ts +2 -0
  405. package/types/components/wd-grid-item/types.d.ts +4 -1
  406. package/types/components/wd-grid-item/wd-grid-item.vue.d.ts +3 -3
  407. package/types/components/wd-icon/types.d.ts +1 -1
  408. package/types/components/wd-icon/wd-icon.vue.d.ts +3 -3
  409. package/types/components/wd-img/types.d.ts +4 -1
  410. package/types/components/wd-img/wd-img.vue.d.ts +11 -4
  411. package/types/components/wd-img-cropper/types.d.ts +7 -0
  412. package/types/components/wd-img-cropper/wd-img-cropper.vue.d.ts +12 -3
  413. package/types/components/wd-index-bar/type.d.ts +2 -1
  414. package/types/components/wd-index-bar/wd-index-bar.vue.d.ts +1 -5
  415. package/types/components/wd-input/types.d.ts +53 -37
  416. package/types/components/wd-input/wd-input.vue.d.ts +50 -52
  417. package/types/components/wd-input-number/types.d.ts +51 -6
  418. package/types/components/wd-input-number/wd-input-number.vue.d.ts +152 -125
  419. package/types/components/wd-keyboard/constants.d.ts +8 -0
  420. package/types/components/wd-keyboard/key/index.vue.d.ts +70 -0
  421. package/types/components/wd-keyboard/key/types.d.ts +23 -0
  422. package/types/components/wd-keyboard/types.d.ts +137 -0
  423. package/types/components/wd-keyboard/wd-keyboard.vue.d.ts +200 -0
  424. package/types/components/wd-loading/wd-loading.vue.d.ts +2 -2
  425. package/types/components/wd-loadmore/types.d.ts +7 -4
  426. package/types/components/wd-loadmore/wd-loadmore.vue.d.ts +5 -9
  427. package/types/components/wd-message-box/index.d.ts +3 -8
  428. package/types/components/wd-message-box/types.d.ts +36 -5
  429. package/types/components/wd-message-box/wd-message-box.vue.d.ts +18 -2
  430. package/types/components/wd-navbar/wd-navbar.vue.d.ts +3 -3
  431. package/types/components/wd-navbar-capsule/types.d.ts +12 -0
  432. package/types/components/wd-navbar-capsule/wd-navbar-capsule.vue.d.ts +27 -4
  433. package/types/components/wd-notice-bar/types.d.ts +9 -1
  434. package/types/components/wd-notice-bar/wd-notice-bar.vue.d.ts +7 -5
  435. package/types/components/wd-notify/types.d.ts +7 -0
  436. package/types/components/wd-notify/wd-notify.vue.d.ts +13 -4
  437. package/types/components/wd-number-keyboard/types.d.ts +7 -0
  438. package/types/components/wd-number-keyboard/wd-number-keyboard.vue.d.ts +18 -9
  439. package/types/components/wd-overlay/wd-overlay.vue.d.ts +2 -2
  440. package/types/components/wd-pagination/wd-pagination.vue.d.ts +1 -1
  441. package/types/components/wd-password-input/wd-password-input.vue.d.ts +2 -2
  442. package/types/components/wd-picker/types.d.ts +28 -2
  443. package/types/components/wd-picker/wd-picker.vue.d.ts +55 -19
  444. package/types/components/wd-picker-view/types.d.ts +10 -0
  445. package/types/components/wd-picker-view/wd-picker-view.vue.d.ts +15 -3
  446. package/types/components/wd-popover/wd-popover.vue.d.ts +4 -4
  447. package/types/components/wd-popup/types.d.ts +44 -5
  448. package/types/components/wd-popup/wd-popup.vue.d.ts +35 -24
  449. package/types/components/wd-progress/types.d.ts +6 -3
  450. package/types/components/wd-progress/wd-progress.vue.d.ts +4 -6
  451. package/types/components/wd-qr-code/uqrcode.vue.d.ts +3 -3
  452. package/types/components/wd-qr-code/wd-qr-code.vue.d.ts +4 -4
  453. package/types/components/wd-radio/types.d.ts +8 -0
  454. package/types/components/wd-radio/wd-radio.vue.d.ts +7 -0
  455. package/types/components/wd-radio-group/types.d.ts +7 -1
  456. package/types/components/wd-radio-group/wd-radio-group.vue.d.ts +11 -2
  457. package/types/components/wd-rate/types.d.ts +9 -0
  458. package/types/components/wd-rate/wd-rate.vue.d.ts +13 -4
  459. package/types/components/wd-root-portal/wd-root-portal.vue.d.ts +26 -0
  460. package/types/components/wd-search/types.d.ts +16 -1
  461. package/types/components/wd-search/wd-search.vue.d.ts +28 -8
  462. package/types/components/wd-segmented/types.d.ts +10 -1
  463. package/types/components/wd-segmented/wd-segmented.vue.d.ts +6 -4
  464. package/types/components/wd-select-picker/types.d.ts +37 -22
  465. package/types/components/wd-select-picker/wd-select-picker.vue.d.ts +59 -30
  466. package/types/components/wd-sidebar/types.d.ts +19 -3
  467. package/types/components/wd-sidebar/wd-sidebar.vue.d.ts +4 -2
  468. package/types/components/wd-signature/types.d.ts +252 -0
  469. package/types/components/wd-signature/wd-signature.vue.d.ts +229 -0
  470. package/types/components/wd-skeleton/types.d.ts +3 -4
  471. package/types/components/wd-skeleton/wd-skeleton.vue.d.ts +10 -10
  472. package/types/components/wd-slider/types.d.ts +39 -15
  473. package/types/components/wd-slider/wd-slider.vue.d.ts +12 -38
  474. package/types/components/wd-sort-button/wd-sort-button.vue.d.ts +3 -3
  475. package/types/components/wd-status-tip/types.d.ts +9 -0
  476. package/types/components/wd-status-tip/wd-status-tip.vue.d.ts +69 -49
  477. package/types/components/wd-steps/wd-steps.vue.d.ts +1 -1
  478. package/types/components/wd-sticky/wd-sticky.vue.d.ts +3 -7
  479. package/types/components/wd-swipe-action/wd-swipe-action.vue.d.ts +3 -3
  480. package/types/components/wd-swiper/wd-swiper.vue.d.ts +4 -4
  481. package/types/components/wd-swiper-nav/types.d.ts +0 -14
  482. package/types/components/wd-swiper-nav/wd-swiper-nav.vue.d.ts +0 -18
  483. package/types/components/wd-switch/types.d.ts +0 -1
  484. package/types/components/wd-switch/wd-switch.vue.d.ts +2 -5
  485. package/types/components/wd-tab/types.d.ts +16 -3
  486. package/types/components/wd-tab/wd-tab.vue.d.ts +12 -4
  487. package/types/components/wd-tabbar/types.d.ts +1 -1
  488. package/types/components/wd-tabbar/wd-tabbar.vue.d.ts +5 -5
  489. package/types/components/wd-tabbar-item/wd-tabbar-item.vue.d.ts +1 -1
  490. package/types/components/wd-table/types.d.ts +12 -8
  491. package/types/components/wd-table/wd-table.vue.d.ts +16 -13
  492. package/types/components/wd-table-col/wd-table-col.vue.d.ts +1 -1
  493. package/types/components/wd-tabs/wd-tabs.vue.d.ts +7 -7
  494. package/types/components/wd-tag/wd-tag.vue.d.ts +4 -4
  495. package/types/components/wd-text/types.d.ts +2 -2
  496. package/types/components/wd-text/wd-text.vue.d.ts +7 -7
  497. package/types/components/wd-textarea/types.d.ts +41 -39
  498. package/types/components/wd-textarea/wd-textarea.vue.d.ts +46 -46
  499. package/types/components/wd-toast/index.d.ts +1 -6
  500. package/types/components/wd-toast/types.d.ts +127 -5
  501. package/types/components/wd-toast/wd-toast.vue.d.ts +101 -0
  502. package/types/components/wd-tooltip/types.d.ts +1 -1
  503. package/types/components/wd-tooltip/wd-tooltip.vue.d.ts +7 -7
  504. package/types/components/wd-tour/types.d.ts +194 -0
  505. package/types/components/wd-tour/wd-tour.vue.d.ts +267 -0
  506. package/types/components/wd-transition/types.d.ts +22 -7
  507. package/types/components/wd-transition/wd-transition.vue.d.ts +33 -20
  508. package/types/components/wd-upload/types.d.ts +39 -10
  509. package/types/components/wd-upload/wd-upload.vue.d.ts +42 -16
  510. package/types/components/wd-watermark/wd-watermark.vue.d.ts +7 -7
  511. package/types/locale/index.d.ts +0 -3
  512. package/types/locale/lang/zh-CN.d.ts +9 -0
  513. package/components/wd-datetime-picker-view/index.scss +0 -0
  514. package/components/wd-form/index.scss +0 -10
  515. package/components/wd-upload/utils.ts +0 -152
  516. package/types/components/common/dayjs.d.ts +0 -26
  517. package/types/components/wd-upload/utils.d.ts +0 -11
  518. package/types/locale/lang/en-US.d.ts +0 -128
@@ -0,0 +1,153 @@
1
+ import type { PropType } from 'vue'
2
+ import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp, makeArrayProp } from '../common/props'
3
+
4
+ export interface TourStep {
5
+ /**
6
+ * 需要高亮的元素选择器
7
+ */
8
+ element: string
9
+ /**
10
+ * 引导文字内容
11
+ */
12
+ content: string
13
+ }
14
+
15
+ export const tourProps = {
16
+ ...baseProps,
17
+
18
+ /**
19
+ * 是否显示引导组件,使用 v-model 绑定
20
+ * 类型:boolean
21
+ * 默认值:false
22
+ */
23
+ modelValue: makeBooleanProp(false),
24
+
25
+ /**
26
+ * 引导步骤列表
27
+ * 类型:array
28
+ * 默认值:[]
29
+ */
30
+ steps: makeArrayProp<TourStep>(),
31
+ /**
32
+ * 引导框的current
33
+ * 类型:number
34
+ * 默认值:0
35
+ */
36
+ current: makeNumberProp(0),
37
+
38
+ /**
39
+ * 蒙版是否显示
40
+ * 类型:boolean
41
+ * 默认值:true
42
+ */
43
+ mask: makeBooleanProp(true),
44
+
45
+ /**
46
+ * 蒙版颜色(支持 rgba 格式)
47
+ * 类型:string
48
+ * 默认值:'rgba(0, 0, 0, 0.5)'
49
+ */
50
+ maskColor: makeStringProp('rgba(0, 0, 0, 0.5)'),
51
+
52
+ /**
53
+ * 引导框与高亮元素之间的间距
54
+ * 类型:number
55
+ * 默认值:20
56
+ */
57
+ offset: makeNumberProp(20),
58
+
59
+ /**
60
+ * 动画持续时间(毫秒)
61
+ * 类型:number
62
+ * 默认值:300
63
+ */
64
+ duration: makeNumberProp(300),
65
+
66
+ /**
67
+ * 高亮区域的圆角大小
68
+ * 类型:number
69
+ * 默认值:8
70
+ */
71
+ borderRadius: makeNumberProp(8),
72
+
73
+ /**
74
+ * 高亮区域的内边距
75
+ * 类型:number
76
+ * 默认值:8
77
+ */
78
+ padding: makeNumberProp(8),
79
+
80
+ /**
81
+ * 上一步按钮文字
82
+ */
83
+ prevText: makeStringProp('上一步'),
84
+
85
+ /**
86
+ * 下一步按钮文字
87
+ */
88
+ nextText: makeStringProp('下一步'),
89
+
90
+ /**
91
+ * 跳过按钮文字
92
+ */
93
+ skipText: makeStringProp('跳过'),
94
+
95
+ /**
96
+ * 完成按钮文字
97
+ */
98
+ finishText: makeStringProp('完成'),
99
+
100
+ /**
101
+ * 安全偏移量,用于滚动计算时确保元素周围有足够的空间
102
+ * 类型:number
103
+ * 默认值:100
104
+ */
105
+ bottomSafetyOffset: makeNumberProp(100),
106
+
107
+ /**
108
+ * 顶部安全偏移量,用于滚动计算时确保元素周围有足够的空间
109
+ * 类型:number
110
+ * 默认值:0
111
+ */
112
+ topSafetyOffset: makeNumberProp(0),
113
+
114
+ /**
115
+ * 是否自定义顶部导航栏
116
+ * 类型:boolean
117
+ * 默认值:false
118
+ */
119
+ customNav: makeBooleanProp(false),
120
+
121
+ /**
122
+ * 点击蒙版是否可以下一步
123
+ * 类型:boolean
124
+ * 默认值:false
125
+ */
126
+ clickMaskNext: makeBooleanProp(false),
127
+
128
+ /**
129
+ * 高亮区域样式
130
+ * 类型:object
131
+ * 默认值:{}
132
+ */
133
+ highlightStyle: {
134
+ type: Object as PropType<Record<string, any>>,
135
+ default: () => ({})
136
+ },
137
+
138
+ /**
139
+ * 引导框的层级
140
+ * 类型:number
141
+ * 默认值:999998
142
+ */
143
+ zIndex: makeNumberProp(999998),
144
+
145
+ /**
146
+ * 是否显示引导按钮
147
+ * 类型:boolean
148
+ * 默认值:true
149
+ */
150
+ showTourButtons: makeBooleanProp(true)
151
+ }
152
+
153
+ export type TourProps = typeof tourProps
@@ -0,0 +1,509 @@
1
+ <template>
2
+ <view
3
+ class="wd-tour"
4
+ v-if="modelValue"
5
+ :style="{ zIndex: zIndex }"
6
+ @touchmove.stop.prevent="noop"
7
+ >
8
+ <view class="wd-tour__mask" @click.stop="handleMask">
9
+ <slot name="highlight" :elementInfo="highlightElementInfo">
10
+ <view class="wd-tour__highlight" :style="highlightStyle"></view>
11
+ </slot>
12
+ <view class="wd-tour__popover" :style="popoverStyle">
13
+ <slot name="content">
14
+ <view class="wd-tour__info">
15
+ <rich-text :nodes="currentStep.content"></rich-text>
16
+ </view>
17
+ </slot>
18
+
19
+ <view class="wd-tour__buttons" v-if="showTourButtons">
20
+ <!-- 上一步按钮 -->
21
+ <view class="wd-tour__prev" v-if="currentIndex > 0" @click.stop="handlePrev">
22
+ <slot name="prev">
23
+ <view class="wd-tour__prev__default">{{ prevText }}</view>
24
+ </slot>
25
+ </view>
26
+
27
+ <!-- 跳过按钮 -->
28
+ <view class="wd-tour__skip" @click.stop="handleSkip">
29
+ <slot name="skip" v-if="$slots.skip"></slot>
30
+ <view class="wd-tour__skip__default" v-else>{{ skipText }}</view>
31
+ </view>
32
+
33
+ <!-- 下一步按钮 -->
34
+ <view
35
+ class="wd-tour__next"
36
+ v-if="currentIndex !== steps.length - 1"
37
+ @click.stop="handleNext"
38
+ >
39
+ <slot name="next">
40
+ <view class="wd-tour__next__default">
41
+ {{ `${nextText}(${currentIndex + 1}/${steps.length})` }}
42
+ </view>
43
+ </slot>
44
+ </view>
45
+
46
+ <!-- 完成按钮 -->
47
+ <view
48
+ class="wd-tour__finish"
49
+ v-if="currentIndex === steps.length - 1"
50
+ @click.stop="handleFinish"
51
+ >
52
+ <slot name="finish">
53
+ <view class="wd-tour__finish__default">{{ finishText }}</view>
54
+ </slot>
55
+ </view>
56
+ </view>
57
+ </view>
58
+ </view>
59
+ </view>
60
+ </template>
61
+
62
+ <script lang="ts">
63
+ export default {
64
+ name: 'wd-tour',
65
+ options: {
66
+ addGlobalClass: true,
67
+ virtualHost: true,
68
+ styleIsolation: 'shared',
69
+ },
70
+ }
71
+ </script>
72
+
73
+ <script lang="ts" setup>
74
+ import { ref, computed, watch, nextTick, CSSProperties } from 'vue'
75
+ import { tourProps } from './types'
76
+ // #ifdef H5
77
+ import { useLockScroll } from '../composables/useLockScroll'
78
+ // #endif
79
+
80
+ interface ElementRect {
81
+ top: number
82
+ left: number
83
+ width: number
84
+ height: number
85
+ bottom?: number
86
+ right?: number
87
+ }
88
+ const props = defineProps(tourProps)
89
+ const emit = defineEmits([
90
+ 'update:modelValue',
91
+ 'update:current',
92
+ 'change',
93
+ 'prev',
94
+ 'next',
95
+ 'finish',
96
+ 'skip',
97
+ 'error',
98
+ ])
99
+ // #ifdef H5
100
+ const { lock, unlock } = useLockScroll(() => props.modelValue)
101
+ // #endif
102
+
103
+ // 响应式数据
104
+ const currentIndex = ref(0)
105
+ const elementInfo = ref<ElementRect>({
106
+ top: 0,
107
+ left: 0,
108
+ width: 0,
109
+ height: 0,
110
+ })
111
+ const windowHeight = ref(0)
112
+ const windowTop = ref(0)
113
+ const isUp = ref(1) // 判断元素位置,确定提示信息在该元素的上方还是下方
114
+ const oldscrollTop = ref(0) // 记录上一次滚动位置
115
+ const statusBarHeight = ref(0)
116
+ const menuButtonInfo = ref(null as UniNamespace.GetMenuButtonBoundingClientRectRes | null)
117
+ const topOffset = ref(0)
118
+
119
+ // 计算属性
120
+ const currentStep = computed(() => {
121
+ return props.steps[currentIndex.value] || {}
122
+ })
123
+ // 提取公共的默认样式函数
124
+ function getDefaultStyle() {
125
+ return {
126
+ top: '0px',
127
+ left: '0px',
128
+ width: '100vw',
129
+ height: '0',
130
+ transition: props.duration + 'ms all',
131
+ borderRadius: '0px',
132
+ padding: '0px',
133
+ }
134
+ }
135
+ // 提取公共的高亮样式计算函数
136
+ function calculateHighlightStyle(padding: number, boxShadow: string) {
137
+ return {
138
+ transition: props.duration + 'ms all,boxShadow 0s,height 0s,width 0s',
139
+ borderRadius: props.borderRadius + 'px',
140
+ padding: padding + 'px',
141
+ boxShadow,
142
+ }
143
+ }
144
+ const highlightStyle = computed(() => {
145
+ // 如果元素信息尚未获取到,返回空样式避免闪烁
146
+ if (!elementInfo.value.width && !elementInfo.value.height) {
147
+ return getDefaultStyle()
148
+ }
149
+ const padding = props.padding
150
+ // 根据是否显示蒙版来设置阴影效果
151
+ const boxShadow = props.mask ? `0 0 0 100vh ${props.maskColor}` : 'none'
152
+
153
+ const baseStyle = calculateHighlightStyle(padding, boxShadow)
154
+ return {
155
+ ...baseStyle,
156
+ top: elementInfo.value.top - padding + 'px',
157
+ left: elementInfo.value.left - padding + 'px',
158
+ height: elementInfo.value.height + 'px',
159
+ width: elementInfo.value.width + 'px',
160
+ }
161
+ })
162
+
163
+ const popoverStyle = computed(() => {
164
+ const style: {
165
+ transition: string
166
+ position: string
167
+ left: string
168
+ transform: string
169
+ maxWidth: string
170
+ textAlign: string
171
+ zIndex: number
172
+ top?: string
173
+ bottom?: string
174
+ } = {
175
+ transition: props.duration + 'ms all',
176
+ position: 'fixed',
177
+ left: '50%',
178
+ transform: 'translateX(-50%)',
179
+ maxWidth: '686rpx',
180
+ textAlign: 'center',
181
+ zIndex: props.zIndex + 1,
182
+ }
183
+ const padding = props.padding
184
+ if (isUp.value === 1) {
185
+ // 提示在元素下方
186
+ style.top =
187
+ elementInfo.value.top + elementInfo.value.height + padding + Number(props.offset) + 'px'
188
+ } else {
189
+ // 提示在元素上方
190
+ style.bottom =
191
+ windowHeight.value +
192
+ windowTop.value -
193
+ elementInfo.value.top +
194
+ padding +
195
+ Number(props.offset) +
196
+ 'px'
197
+ }
198
+
199
+ return style as CSSProperties
200
+ })
201
+
202
+ const highlightElementInfo = computed(() => {
203
+ const padding = props.padding
204
+ const boxShadow = props.mask ? `0 0 0 100vh ${props.maskColor}` : 'none'
205
+ // 如果元素信息尚未获取到,返回空样式避免闪烁
206
+ if (!elementInfo.value.width && !elementInfo.value.height) {
207
+ return getDefaultStyle()
208
+ }
209
+
210
+ const baseStyle = calculateHighlightStyle(padding, boxShadow)
211
+ return {
212
+ ...baseStyle,
213
+ top: elementInfo.value.top - padding + 'px',
214
+ left: elementInfo.value.left - padding + 'px',
215
+ width: elementInfo.value.width + padding * 2 + 'px', // 加上左右padding
216
+ height: elementInfo.value.height + padding * 2 + 'px', // 加上上下padding
217
+ }
218
+ })
219
+ function noop() {}
220
+ // 方法
221
+ function updateElementInfo() {
222
+ // 每次更新元素信息时重新获取系统信息,确保准确性
223
+ updateSystemInfo()
224
+
225
+ const element = currentStep.value.element
226
+ if (!element) return
227
+ try {
228
+ const query = uni.createSelectorQuery()
229
+ query
230
+ .select(element)
231
+ .boundingClientRect((res: any) => {
232
+ if (!res) {
233
+ console.error('无法找到元素:', element)
234
+ emit('error', {
235
+ message: '无法找到指定的引导元素',
236
+ element,
237
+ })
238
+ return
239
+ }
240
+ // 初始化元素信息
241
+ initializeElementInfo(res)
242
+ // 获取有效的页面边界
243
+ const effectiveBoundaries = getEffectiveBoundaries()
244
+ // 检查是否需要滚动
245
+ const scrollNeeds = checkScrollNeeds(res, effectiveBoundaries)
246
+ // 处理滚动逻辑
247
+ handleScrolling(res, scrollNeeds, effectiveBoundaries)
248
+ // 计算提示框显示位置
249
+ calculateTipPosition(res, effectiveBoundaries)
250
+ })
251
+ .exec()
252
+ } catch (error) {
253
+ console.error('updateElementInfo error:', error)
254
+ }
255
+ }
256
+
257
+ // 更新系统信息
258
+ function updateSystemInfo() {
259
+ const sysInfo = uni.getSystemInfoSync()
260
+ windowHeight.value = sysInfo.windowHeight
261
+ windowTop.value = sysInfo.windowTop || 0
262
+ statusBarHeight.value = sysInfo.statusBarHeight || 0
263
+ }
264
+
265
+ // 初始化元素信息
266
+ function initializeElementInfo(res: ElementRect) {
267
+ elementInfo.value = res
268
+ // 调整元素位置信息,加上窗口顶部偏移量
269
+ elementInfo.value.top = res.top + windowTop.value
270
+ elementInfo.value.bottom = (res.bottom ?? 0) + windowTop.value
271
+ }
272
+ // 获取有效的页面边界(顶部和底部安全区域)
273
+ function getEffectiveBoundaries() {
274
+ // 有效顶部边界初始化为窗口顶部 + 顶部偏移量
275
+ const effectiveWindowTop = windowTop.value + Number(topOffset.value)
276
+ // 有效底部边界为窗口高度
277
+ const effectiveWindowBottom = windowHeight.value
278
+ return {
279
+ top: effectiveWindowTop,
280
+ bottom: effectiveWindowBottom,
281
+ }
282
+ }
283
+ // 检查是否需要滚动
284
+ function checkScrollNeeds(res: ElementRect, boundaries: { top: number; bottom: number }) {
285
+ // 判断元素是否被顶部遮挡(需要向上滚动)
286
+ const needScrollUp = res.top < boundaries.top
287
+ // 判断元素是否被底部遮挡(需要向下滚动)
288
+ const needScrollDown =
289
+ (res.bottom !== undefined ? res.bottom : 0) + Number(props.bottomSafetyOffset) >
290
+ boundaries.bottom
291
+ return {
292
+ up: needScrollUp, // 提示框往上走
293
+ down: needScrollDown, // 提示框往下走
294
+ }
295
+ }
296
+
297
+ // 处理滚动逻辑
298
+ function handleScrolling(
299
+ res: ElementRect,
300
+ scrollNeeds,
301
+ boundaries: { top: number; bottom: number },
302
+ ) {
303
+ if (scrollNeeds.up) {
304
+ // 元素被顶部遮挡,需要提示框往上走,页面往下走
305
+ scrollUp(res, boundaries)
306
+ } else if (scrollNeeds.down) {
307
+ // 元素被底部遮挡,需要提示框向下走,页面向上走
308
+ scrollDown(res)
309
+ }
310
+ }
311
+
312
+ // 向引导上滚动处理
313
+ function scrollUp(res: ElementRect, boundaries: { top: number; bottom: number }) {
314
+ // 计算需要滚动的距离
315
+ const scrollDistance = oldscrollTop.value + res.top - props.padding - boundaries.top
316
+ // 更新元素位置信息(滚动后)
317
+ elementInfo.value.top = boundaries.top + props.padding
318
+ elementInfo.value.bottom = windowHeight.value - (boundaries.top + props.padding)
319
+ uni.pageScrollTo({
320
+ scrollTop: scrollDistance,
321
+ duration: Number(props.duration),
322
+ success: () => {
323
+ // 更新已滚动距离
324
+ oldscrollTop.value = scrollDistance
325
+ },
326
+ })
327
+ }
328
+
329
+ // 引导向下滚动处理
330
+ function scrollDown(res: ElementRect) {
331
+ // 计算需要滚动的距离
332
+ const scrollDistance =
333
+ (res.bottom ?? 0) - windowHeight.value + props.padding + Number(props.bottomSafetyOffset)
334
+
335
+ // 更新元素位置信息(滚动后)
336
+ elementInfo.value.top =
337
+ windowHeight.value - res.height - props.padding - Number(props.bottomSafetyOffset) // 应该是减去安全偏移量
338
+ elementInfo.value.bottom = windowHeight.value - props.padding - Number(props.bottomSafetyOffset)
339
+
340
+ uni.pageScrollTo({
341
+ scrollTop: scrollDistance + oldscrollTop.value,
342
+ duration: Number(props.duration),
343
+ success: () => {
344
+ // 更新已滚动距离
345
+ oldscrollTop.value = scrollDistance + oldscrollTop.value
346
+ },
347
+ })
348
+ }
349
+
350
+ // 计算提示框显示位置(上方或下方)
351
+ function calculateTipPosition(res: ElementRect, boundaries: { top: number; bottom: number }) {
352
+ // 计算导航区域总高度
353
+ const totalNavHeight = statusBarHeight.value
354
+
355
+ // #ifdef MP
356
+ // 微信小程序平台考虑菜单按钮高度
357
+ // if (props.customNav) {
358
+ // // const menuBottom = this.menuButtonInfo.top + this.menuButtonInfo.height;
359
+ // const menuBottom = menuButtonInfo.value.top;
360
+ // totalNavHeight = Math.max(totalNavHeight, menuBottom);
361
+ // }
362
+ // #endif
363
+ // totalNavHeight = Math.max(totalNavHeight, topOffset.value);
364
+
365
+ // 计算屏幕中心点位置
366
+ const screenCenter = (windowHeight.value + totalNavHeight) / 2 + windowTop.value
367
+
368
+ // 计算元素中心点位置
369
+ const elementCenter = res.top + res.height / 2 + windowTop.value
370
+
371
+ // 根据元素位置决定提示框显示在上方还是下方
372
+ if (elementCenter < screenCenter) {
373
+ isUp.value = 1 // 提示在元素下方
374
+ } else {
375
+ isUp.value = 0 // 提示在元素上方
376
+ }
377
+ }
378
+
379
+ function handlePrev() {
380
+ if (currentIndex.value > 0) {
381
+ const oldIndex = currentIndex.value
382
+ currentIndex.value--
383
+ emit('prev', {
384
+ oldCurrent: oldIndex,
385
+ current: currentIndex.value,
386
+ total: props.steps.length,
387
+ isUp: isUp.value,
388
+ })
389
+ emit('change', currentIndex.value)
390
+ }
391
+ }
392
+
393
+ function handleNext() {
394
+ if (currentIndex.value < props.steps.length - 1) {
395
+ const oldIndex = currentIndex.value
396
+ currentIndex.value++
397
+ emit('next', {
398
+ oldCurrent: oldIndex,
399
+ current: currentIndex.value,
400
+ total: props.steps.length,
401
+ isUp: isUp.value,
402
+ })
403
+ emit('change', currentIndex.value)
404
+ } else {
405
+ handleFinish()
406
+ }
407
+ }
408
+
409
+ function handleFinish() {
410
+ emit('finish', {
411
+ current: currentIndex.value,
412
+ total: props.steps.length,
413
+ })
414
+ currentIndex.value = 0
415
+ oldscrollTop.value = 0 // 重置滚动位置
416
+ emit('update:modelValue', false)
417
+ }
418
+
419
+ function handleSkip() {
420
+ emit('skip', {
421
+ current: currentIndex.value,
422
+ total: props.steps.length,
423
+ })
424
+ currentIndex.value = 0
425
+ oldscrollTop.value = 0 // 重置滚动位置
426
+ emit('update:modelValue', false)
427
+ }
428
+ function handleMask() {
429
+ if (props.clickMaskNext) {
430
+ handleNext()
431
+ }
432
+ }
433
+
434
+ watch(
435
+ () => props.current,
436
+ (newVal) => {
437
+ currentIndex.value = newVal
438
+ },
439
+ )
440
+ // 监听 currentIndex 变化,同步到父组件
441
+ watch(
442
+ () => currentIndex.value,
443
+ (newVal) => {
444
+ nextTick(() => {
445
+ setTimeout(() => {
446
+ updateElementInfo()
447
+ }, 50)
448
+ })
449
+ emit('update:current', newVal)
450
+ },
451
+ )
452
+
453
+ // 监听 modelValue 变化,当组件显示时更新系统信息
454
+ watch(
455
+ () => props.modelValue,
456
+ (newVal) => {
457
+ if (newVal) {
458
+ // 组件显示时重置滚动位置并更新系统信息
459
+ oldscrollTop.value = 0
460
+ updateSystemInfo()
461
+ nextTick(() => {
462
+ setTimeout(() => {
463
+ updateElementInfo()
464
+ emit('update:current', currentIndex.value)
465
+ }, 50)
466
+ })
467
+ }
468
+ },
469
+ {
470
+ immediate: true,
471
+ },
472
+ )
473
+
474
+ // 初始化
475
+ // updateSystemInfo()
476
+
477
+ // 所有平台统一处理逻辑
478
+ if (props.customNav) {
479
+ // 开启了自定义导航栏
480
+ if (props.topSafetyOffset && Number(props.topSafetyOffset) > 0) {
481
+ // 用户传入了顶部安全偏移量,优先使用用户设置的值
482
+ topOffset.value = Number(props.topSafetyOffset)
483
+ } else {
484
+ // 未传入顶部偏移量
485
+ // #ifdef MP
486
+ // 微信小程序平台获取菜单按钮信息并使用其顶部位置
487
+ menuButtonInfo.value = uni.getMenuButtonBoundingClientRect() || null
488
+ topOffset.value = menuButtonInfo.value ? menuButtonInfo.value.top : 0
489
+ // #endif
490
+ // #ifndef MP
491
+ // 非微信小程序平台默认为0
492
+ topOffset.value = 0
493
+ // #endif
494
+ }
495
+ } else {
496
+ // 未开启自定义导航栏,直接使用用户传入的顶部安全偏移量
497
+ topOffset.value = Number(props.topSafetyOffset) || 0
498
+ }
499
+ defineExpose({
500
+ handlePrev,
501
+ handleNext,
502
+ handleFinish,
503
+ handleSkip,
504
+ })
505
+ </script>
506
+
507
+ <style lang="scss" scoped>
508
+ @import './index.scss';
509
+ </style>