hy-app 0.4.13 → 0.5.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 (211) hide show
  1. package/components/hy-action-sheet/hy-action-sheet.vue +155 -238
  2. package/components/hy-action-sheet/props.ts +68 -15
  3. package/components/hy-action-sheet/typing.d.ts +115 -115
  4. package/components/hy-address-picker/hy-address-picker.vue +185 -289
  5. package/components/hy-address-picker/props.ts +97 -21
  6. package/components/hy-address-picker/typing.d.ts +90 -89
  7. package/components/hy-avatar/hy-avatar.vue +121 -204
  8. package/components/hy-avatar/props.ts +76 -18
  9. package/components/hy-avatar/typing.d.ts +63 -62
  10. package/components/hy-back-top/hy-back-top.vue +65 -120
  11. package/components/hy-back-top/props.ts +57 -16
  12. package/components/hy-back-top/typing.d.ts +43 -42
  13. package/components/hy-badge/hy-badge.vue +66 -138
  14. package/components/hy-badge/props.ts +73 -17
  15. package/components/hy-badge/typing.d.ts +59 -58
  16. package/components/hy-button/hy-button.vue +226 -375
  17. package/components/hy-button/props.ts +129 -158
  18. package/components/hy-calendar/header.vue +48 -64
  19. package/components/hy-calendar/hy-calendar.vue +274 -438
  20. package/components/hy-calendar/month.vue +508 -516
  21. package/components/hy-calendar/props.ts +157 -35
  22. package/components/hy-calendar/typing.d.ts +129 -128
  23. package/components/hy-card/hy-card.vue +118 -240
  24. package/components/hy-card/index.scss +1 -2
  25. package/components/hy-card/props.ts +122 -27
  26. package/components/hy-card/typing.d.ts +119 -118
  27. package/components/hy-cell/hy-cell.vue +176 -258
  28. package/components/hy-cell/props.ts +71 -17
  29. package/components/hy-cell/typing.d.ts +87 -86
  30. package/components/hy-check-button/hy-check-button.vue +69 -139
  31. package/components/hy-check-button/props.ts +72 -18
  32. package/components/hy-check-button/typing.d.ts +74 -73
  33. package/components/hy-checkbox/hy-checkbox.vue +170 -263
  34. package/components/hy-checkbox/props.ts +94 -24
  35. package/components/hy-checkbox/typing.d.ts +72 -72
  36. package/components/hy-checkbox-group/hy-checkbox-group.vue +25 -100
  37. package/components/hy-checkbox-group/props.ts +80 -0
  38. package/components/hy-checkbox-group/typing.d.ts +65 -65
  39. package/components/hy-checkbox-item/hy-checkbox-item.vue +140 -177
  40. package/components/hy-checkbox-item/props.ts +24 -0
  41. package/components/hy-checkbox-item/typing.d.ts +4 -3
  42. package/components/hy-code-input/hy-code-input.vue +179 -262
  43. package/components/hy-code-input/props.ts +84 -18
  44. package/components/hy-code-input/typing.d.ts +71 -71
  45. package/components/hy-config-provider/hy-config-provider.vue +28 -50
  46. package/components/hy-config-provider/props.ts +26 -11
  47. package/components/hy-config-provider/typing.d.ts +20 -20
  48. package/components/hy-count-down/hy-count-down.vue +103 -131
  49. package/components/hy-count-down/props.ts +30 -8
  50. package/components/hy-count-down/typing.d.ts +25 -25
  51. package/components/hy-count-to/hy-count-to.vue +148 -213
  52. package/components/hy-count-to/props.ts +60 -15
  53. package/components/hy-count-to/typing.d.ts +46 -46
  54. package/components/hy-coupon/README.md +133 -0
  55. package/components/hy-coupon/hy-coupon.vue +180 -0
  56. package/components/hy-coupon/index.scss +553 -0
  57. package/components/hy-coupon/props.ts +129 -0
  58. package/components/hy-coupon/typing.d.ts +146 -0
  59. package/components/hy-datetime-picker/hy-datetime-picker.vue +415 -580
  60. package/components/hy-datetime-picker/props.ts +142 -32
  61. package/components/hy-datetime-picker/typing.d.ts +132 -132
  62. package/components/hy-divider/hy-divider.vue +90 -169
  63. package/components/hy-divider/props.ts +78 -19
  64. package/components/hy-divider/typing.d.ts +60 -60
  65. package/components/hy-dropdown/hy-dropdown.vue +37 -71
  66. package/components/hy-dropdown/props.ts +38 -15
  67. package/components/hy-dropdown/typing.d.ts +44 -44
  68. package/components/hy-dropdown-item/hy-dropdown-item.vue +141 -173
  69. package/components/hy-dropdown-item/props.ts +19 -8
  70. package/components/hy-empty/hy-empty.vue +75 -129
  71. package/components/hy-empty/props.ts +57 -15
  72. package/components/hy-empty/typing.d.ts +84 -84
  73. package/components/hy-flex/hy-flex.vue +33 -88
  74. package/components/hy-flex/props.ts +58 -0
  75. package/components/hy-flex/typing.d.ts +14 -16
  76. package/components/hy-float-button/hy-float-button.vue +289 -406
  77. package/components/hy-float-button/props.ts +109 -25
  78. package/components/hy-folding-panel/hy-folding-panel.vue +86 -374
  79. package/components/hy-folding-panel/props.ts +40 -15
  80. package/components/hy-folding-panel/typing.d.ts +52 -63
  81. package/components/hy-folding-panel-item/hy-folding-panel-item.vue +186 -228
  82. package/components/hy-folding-panel-item/index.scss +87 -0
  83. package/components/hy-folding-panel-item/props.ts +81 -0
  84. package/components/hy-folding-panel-item/typing.d.ts +23 -0
  85. package/components/hy-form/hy-form.vue +172 -212
  86. package/components/hy-form/props.ts +37 -0
  87. package/components/hy-form/typing.d.ts +68 -61
  88. package/components/hy-form-group/typing.d.ts +74 -74
  89. package/components/hy-form-item/hy-form-item.vue +100 -129
  90. package/components/hy-form-item/props.ts +25 -0
  91. package/components/hy-form-item/typing.d.ts +40 -37
  92. package/components/hy-grid/hy-grid.vue +76 -132
  93. package/components/hy-grid/props.ts +58 -16
  94. package/components/hy-grid/typing.d.ts +66 -66
  95. package/components/hy-icon/hy-icon.vue +84 -161
  96. package/components/hy-icon/props.ts +76 -22
  97. package/components/hy-icon/typing.d.ts +83 -82
  98. package/components/hy-image/hy-image.vue +142 -272
  99. package/components/hy-image/props.ts +105 -23
  100. package/components/hy-image/typing.d.ts +84 -87
  101. package/components/hy-input/hy-input.vue +230 -421
  102. package/components/hy-input/props.ts +183 -35
  103. package/components/hy-input/typing.d.ts +169 -169
  104. package/components/hy-line/hy-line.vue +34 -72
  105. package/components/hy-line/props.ts +41 -10
  106. package/components/hy-line/typing.d.ts +29 -29
  107. package/components/hy-line-progress/hy-line-progress.vue +66 -101
  108. package/components/hy-line-progress/props.ts +31 -10
  109. package/components/hy-line-progress/typing.d.ts +29 -29
  110. package/components/hy-list/hy-list.vue +151 -220
  111. package/components/hy-list/props.ts +67 -16
  112. package/components/hy-list/typing.d.ts +52 -52
  113. package/components/hy-loading/hy-loading.vue +63 -119
  114. package/components/hy-loading/props.ts +63 -15
  115. package/components/hy-loading/typing.d.ts +49 -49
  116. package/components/hy-menu/hy-menu.vue +124 -166
  117. package/components/hy-menu/props.ts +42 -10
  118. package/components/hy-menu/typing.d.ts +60 -60
  119. package/components/hy-modal/hy-modal.vue +127 -218
  120. package/components/hy-modal/props.ts +89 -24
  121. package/components/hy-navbar/hy-navbar.vue +104 -177
  122. package/components/hy-navbar/props.ts +76 -22
  123. package/components/hy-navbar/typing.d.ts +81 -81
  124. package/components/hy-notice-bar/hy-notice-bar.vue +67 -144
  125. package/components/hy-notice-bar/props.ts +80 -19
  126. package/components/hy-notice-bar/typing.d.ts +62 -62
  127. package/components/hy-notify/hy-notify.vue +128 -177
  128. package/components/hy-notify/props.ts +49 -12
  129. package/components/hy-notify/typing.d.ts +45 -41
  130. package/components/hy-number-step/hy-number-step.vue +281 -394
  131. package/components/hy-number-step/props.ts +110 -27
  132. package/components/hy-number-step/typing.d.ts +120 -120
  133. package/components/hy-overlay/hy-overlay.vue +39 -66
  134. package/components/hy-overlay/props.ts +31 -8
  135. package/components/hy-pagination/hy-pagination.vue +100 -155
  136. package/components/hy-pagination/props.ts +53 -13
  137. package/components/hy-picker/hy-picker.vue +309 -430
  138. package/components/hy-picker/index.scss +8 -12
  139. package/components/hy-picker/props.ts +110 -26
  140. package/components/hy-popover/hy-popover.vue +190 -252
  141. package/components/hy-popover/props.ts +48 -10
  142. package/components/hy-popup/hy-popup.vue +162 -248
  143. package/components/hy-popup/props.ts +82 -18
  144. package/components/hy-price/hy-price.vue +45 -104
  145. package/components/hy-price/props.ts +52 -12
  146. package/components/hy-price/typing.d.ts +41 -36
  147. package/components/hy-qrcode/hy-qrcode.vue +115 -185
  148. package/components/hy-qrcode/props.ts +68 -18
  149. package/components/hy-qrcode/typing.d.ts +67 -66
  150. package/components/hy-radio/hy-radio.vue +161 -259
  151. package/components/hy-radio/props.ts +95 -25
  152. package/components/hy-radio/typing.d.ts +85 -84
  153. package/components/hy-rate/hy-rate.vue +185 -270
  154. package/components/hy-rate/props.ts +76 -18
  155. package/components/hy-rate/typing.d.ts +61 -60
  156. package/components/hy-read-more/hy-read-more.vue +93 -136
  157. package/components/hy-read-more/props.ts +43 -13
  158. package/components/hy-scroll-list/hy-scroll-list.vue +81 -102
  159. package/components/hy-scroll-list/props.ts +22 -11
  160. package/components/hy-search/hy-search.vue +155 -284
  161. package/components/hy-search/props.ts +130 -25
  162. package/components/hy-signature/hy-signature.vue +491 -635
  163. package/components/hy-signature/props.ts +115 -26
  164. package/components/hy-signature/typing.d.ts +138 -138
  165. package/components/hy-slider/hy-slider.vue +388 -477
  166. package/components/hy-slider/props.ts +75 -19
  167. package/components/hy-steps/hy-steps.vue +212 -279
  168. package/components/hy-steps/props.ts +47 -13
  169. package/components/hy-submit-bar/hy-submit-bar.vue +137 -222
  170. package/components/hy-submit-bar/props.ts +89 -20
  171. package/components/hy-submit-bar/typing.d.ts +86 -85
  172. package/components/hy-subsection/hy-subsection.vue +132 -185
  173. package/components/hy-subsection/props.ts +50 -17
  174. package/components/hy-subsection/typing.d.ts +52 -52
  175. package/components/hy-swipe-action/hy-swipe-action.vue +228 -283
  176. package/components/hy-swipe-action/props.ts +43 -18
  177. package/components/hy-swipe-action/typing.d.ts +46 -46
  178. package/components/hy-swiper/hy-swiper.vue +159 -286
  179. package/components/hy-swiper/props.ts +126 -28
  180. package/components/hy-swiper/typing.d.ts +115 -115
  181. package/components/hy-switch/hy-switch.vue +112 -176
  182. package/components/hy-switch/props.ts +60 -15
  183. package/components/hy-switch/typing.d.ts +63 -63
  184. package/components/hy-tabBar/hy-tabBar.vue +64 -60
  185. package/components/hy-tabs/hy-tabs.vue +277 -380
  186. package/components/hy-tabs/props.ts +75 -18
  187. package/components/hy-tag/hy-tag.vue +111 -204
  188. package/components/hy-tag/props.ts +81 -19
  189. package/components/hy-text/hy-text.vue +200 -322
  190. package/components/hy-text/props.ts +107 -28
  191. package/components/hy-textarea/hy-textarea.vue +147 -256
  192. package/components/hy-textarea/props.ts +112 -25
  193. package/components/hy-textarea/typing.d.ts +42 -42
  194. package/components/hy-toast/hy-toast.vue +135 -143
  195. package/components/hy-tooltip/hy-tooltip.vue +220 -306
  196. package/components/hy-tooltip/props.ts +79 -15
  197. package/components/hy-transition/hy-transition.vue +111 -138
  198. package/components/hy-transition/props.ts +30 -8
  199. package/components/hy-upload/hy-upload.vue +320 -469
  200. package/components/hy-upload/props.ts +130 -27
  201. package/components/hy-warn/hy-warn.vue +80 -129
  202. package/components/hy-warn/props.ts +47 -12
  203. package/components/hy-waterfall/hy-waterfall.vue +139 -163
  204. package/components/hy-waterfall/props.ts +19 -7
  205. package/components/hy-watermark/hy-watermark.vue +762 -870
  206. package/components/hy-watermark/props.ts +103 -22
  207. package/global.d.ts +2 -0
  208. package/libs/css/theme.scss +3 -3
  209. package/package.json +2 -2
  210. package/web-types.json +1 -1
  211. package/components/hy-folding-panel/index.scss +0 -9
@@ -1,78 +1,78 @@
1
1
  import type { CSSProperties } from 'vue'
2
2
 
3
3
  export default interface HyCodeInputProps {
4
- modelValue: string | number
5
- /**
6
- * @description 键盘弹起时,是否自动上推页面(默认 true )
7
- * */
8
- adjustPosition?: boolean
9
- /**
10
- * @description 最大输入长度(默认 6 )
11
- * */
12
- maxlength?: number
13
- /**
14
- * @description 显示border
15
- * */
16
- border?: boolean
17
- /**
18
- * @description 是否用圆点填充(默认 false )
19
- * */
20
- dot?: boolean
21
- /**
22
- * @description 显示模式,box-盒子模式,line-底部横线模式 (默认 'box' )
23
- * */
24
- mode?: 'box' | string
25
- /**
26
- * @description 是否细边框 (默认 false )
27
- * */
28
- hairline?: boolean
29
- /**
30
- * @description 字符间的距离 (默认 10 )
31
- * */
32
- space?: number
33
- /**
34
- * @description 是否自动获取焦点 (默认 false )
35
- * */
36
- focus?: boolean
37
- /**
38
- * @description 字体是否加粗 (默认 false )
39
- * */
40
- bold?: boolean
41
- /**
42
- * @description 字体颜色 (默认 '#606266' )
43
- * */
44
- color?: string
45
- /**
46
- * @description 字体大小,单位px (默认 18 )
47
- * */
48
- fontSize?: number
49
- /**
50
- * @description 输入框的大小,宽等于高 (默认 35 )
51
- * */
52
- size?: number | string
53
- /**
54
- * @description 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true (默认 false )
55
- * */
56
- disabledKeyboard?: boolean
57
- /**
58
- * @description 边框和线条颜色 (默认 '#c9cacc' )
59
- * */
60
- borderColor?: string
61
- /**
62
- * @description 是否禁止输入"."符号 (默认 true )
63
- * */
64
- disabledDot?: boolean
65
- /**
66
- * @description 定义需要用到的外部样式
67
- * */
68
- customStyle?: CSSProperties
4
+ modelValue: string | number
5
+ /**
6
+ * @description 键盘弹起时,是否自动上推页面(默认 true )
7
+ * */
8
+ adjustPosition?: boolean
9
+ /**
10
+ * @description 最大输入长度(默认 6 )
11
+ * */
12
+ maxlength?: number
13
+ /**
14
+ * @description 显示border
15
+ * */
16
+ border?: boolean
17
+ /**
18
+ * @description 是否用圆点填充(默认 false )
19
+ * */
20
+ dot?: boolean
21
+ /**
22
+ * @description 显示模式,box-盒子模式,line-底部横线模式 (默认 'box' )
23
+ * */
24
+ mode?: 'box' | string
25
+ /**
26
+ * @description 是否细边框 (默认 false )
27
+ * */
28
+ hairline?: boolean
29
+ /**
30
+ * @description 字符间的距离 (默认 10 )
31
+ * */
32
+ space?: number
33
+ /**
34
+ * @description 是否自动获取焦点 (默认 false )
35
+ * */
36
+ focus?: boolean
37
+ /**
38
+ * @description 字体是否加粗 (默认 false )
39
+ * */
40
+ bold?: boolean
41
+ /**
42
+ * @description 字体颜色 (默认 '#606266' )
43
+ * */
44
+ color?: string
45
+ /**
46
+ * @description 字体大小,单位px (默认 18 )
47
+ * */
48
+ fontSize?: number
49
+ /**
50
+ * @description 输入框的大小,宽等于高 (默认 35 )
51
+ * */
52
+ size?: number | string
53
+ /**
54
+ * @description 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true (默认 false )
55
+ * */
56
+ disabledKeyboard?: boolean
57
+ /**
58
+ * @description 边框和线条颜色 (默认 '#c9cacc' )
59
+ * */
60
+ borderColor?: string
61
+ /**
62
+ * @description 是否禁止输入"."符号 (默认 true )
63
+ * */
64
+ disabledDot?: boolean
65
+ /**
66
+ * @description 定义需要用到的外部样式
67
+ * */
68
+ customStyle?: CSSProperties
69
69
  }
70
70
 
71
71
  export interface ICodeInputEmits {
72
- /** 输入内容发生改变时触发 */
73
- (e: 'change', value: string | number): void
74
- /** 输入字符个数达maxlength值时触发确认 */
75
- (e: 'finish', value: string | number): void
76
- /** 更新值 */
77
- (e: 'update:modelValue', value: string | number): void
72
+ /** 输入内容发生改变时触发 */
73
+ (e: 'change', value: string | number): void
74
+ /** 输入字符个数达maxlength值时触发确认 */
75
+ (e: 'finish', value: string | number): void
76
+ /** 更新值 */
77
+ (e: 'update:modelValue', value: string | number): void
78
78
  }
@@ -1,73 +1,51 @@
1
1
  <template>
2
- <view :class="themeClass" :style="themeStyle">
3
- <!-- @slot 默认插槽 -->
4
- <slot />
5
- </view>
2
+ <view :class="themeClass" :style="themeStyle">
3
+ <!-- @slot 默认插槽 -->
4
+ <slot />
5
+ </view>
6
6
  </template>
7
7
 
8
8
  <script lang="ts">
9
9
  export default {
10
- name: "hy-config-provider",
11
- options: {
12
- addGlobalClass: true,
13
- virtualHost: true,
14
- styleIsolation: "shared",
15
- },
16
- };
10
+ name: 'hy-config-provider',
11
+ options: {
12
+ addGlobalClass: true,
13
+ virtualHost: true,
14
+ styleIsolation: 'shared'
15
+ }
16
+ }
17
17
  </script>
18
18
 
19
19
  <script setup lang="ts">
20
- import { computed } from "vue";
21
- import type { CSSProperties, PropType } from "vue";
22
- import { ColorConfig, addUnit, colorGradient } from "../../libs";
20
+ import { computed } from 'vue'
21
+ import { addUnit, colorGradient } from '../../libs'
22
+ import configProviderProps from './props'
23
23
 
24
24
  /**
25
25
  * 将 ConfigProvider 组件的 theme 属性设置为 dark,可以开启深色模式。 深色模式会全局生效,使页面上的所有 Wot 组件变为深色风格。
26
26
  * @displayName hy-config-provider
27
27
  */
28
- defineOptions({});
28
+ defineOptions({})
29
29
 
30
30
  // const props = withDefaults(defineProps<IProps>(), defaultProps);
31
- const props = defineProps({
32
- /**
33
- * 主题色,暗色或者默认白色
34
- * @values dark,light
35
- * */
36
- theme: {
37
- type: String,
38
- default: "light",
39
- },
40
- /** 主题色 */
41
- themeColor: {
42
- type: String,
43
- default: ColorConfig.primary,
44
- },
45
- /** 内边距 */
46
- padding: [String, Number],
47
- /** 定义需要用到的主题类名 */
48
- customClass: String,
49
- /** 定义需要用到的外部样式 */
50
- customStyle: {
51
- type: [Object, Array] as PropType<CSSProperties | CSSProperties[]>,
52
- },
53
- });
31
+ const props = defineProps(configProviderProps)
54
32
 
55
33
  const themeClass = computed(() => {
56
- return [props.customClass, "hy-config-provider", `hy-theme--${props.theme}`];
57
- });
34
+ return [props.customClass, 'hy-config-provider', `hy-theme--${props.theme}`]
35
+ })
58
36
 
59
37
  const themeStyle = computed(() => {
60
- return [
61
- {
62
- "--hy-theme-color": props.themeColor,
63
- "--hy-theme--light": colorGradient(props.themeColor)[90],
64
- padding: addUnit(props.padding),
65
- },
66
- props.customStyle,
67
- ];
68
- });
38
+ return [
39
+ {
40
+ '--hy-theme-color': props.themeColor,
41
+ '--hy-theme--light': colorGradient(props.themeColor)[90],
42
+ padding: addUnit(props.padding)
43
+ },
44
+ props.customStyle
45
+ ]
46
+ })
69
47
  </script>
70
48
 
71
49
  <style scoped lang="scss">
72
- @import "./index.scss";
50
+ @import './index.scss';
73
51
  </style>
@@ -1,13 +1,28 @@
1
- import type IProps from "./typing";
2
- import { ColorConfig } from "../../libs/config";
1
+ import { ColorConfig } from '../../libs/config'
2
+ import type { CSSProperties, PropType } from 'vue'
3
3
 
4
- const defaultProps: IProps = {
5
- theme: "light",
6
- themeColor: ColorConfig.primary,
7
- themeLightColor: "#ecf5ff",
8
- padding: "",
9
- customClass: "",
10
- customStyle: {},
11
- };
4
+ const configProviderProps = {
5
+ /**
6
+ * 主题色,暗色或者默认白色
7
+ * @values dark,light
8
+ * */
9
+ theme: {
10
+ type: String,
11
+ default: 'light'
12
+ },
13
+ /** 主题色 */
14
+ themeColor: {
15
+ type: String,
16
+ default: ColorConfig.primary
17
+ },
18
+ /** 内边距 */
19
+ padding: [String, Number],
20
+ /** 定义需要用到的主题类名 */
21
+ customClass: String,
22
+ /** 定义需要用到的外部样式 */
23
+ customStyle: {
24
+ type: [Object, Array] as PropType<CSSProperties | CSSProperties[]>
25
+ }
26
+ }
12
27
 
13
- export default defaultProps;
28
+ export default configProviderProps
@@ -1,24 +1,24 @@
1
1
  import type { CSSProperties } from 'vue'
2
2
 
3
3
  export default interface HyConfigProviderProps {
4
- /**
5
- * @description dark-暗色、light-亮色
6
- * */
7
- theme?: HyApp.DarkModeType
8
- /**
9
- * @description 主题色(默认 #3c9cff )
10
- * */
11
- themeColor?: string
12
- /**
13
- * @description 内边距(默认 10px )
14
- * */
15
- padding?: string
16
- /**
17
- * @description 定义需要用到的主题类名
18
- * */
19
- customClass?: string | string[]
20
- /**
21
- * @description 定义需要用到的外部样式
22
- * */
23
- customStyle?: CSSProperties | CSSProperties[]
4
+ /**
5
+ * @description dark-暗色、light-亮色
6
+ * */
7
+ theme?: HyApp.DarkModeType
8
+ /**
9
+ * @description 主题色(默认 #3c9cff )
10
+ * */
11
+ themeColor?: string
12
+ /**
13
+ * @description 内边距(默认 10px )
14
+ * */
15
+ padding?: string
16
+ /**
17
+ * @description 定义需要用到的主题类名
18
+ * */
19
+ customClass?: string | string[]
20
+ /**
21
+ * @description 定义需要用到的外部样式
22
+ * */
23
+ customStyle?: CSSProperties | CSSProperties[]
24
24
  }
@@ -1,198 +1,170 @@
1
1
  <template>
2
- <view :class="['hy-count-down', customClass]" :style="customStyle">
3
- <!--
2
+ <view :class="['hy-count-down', customClass]" :style="customStyle">
3
+ <!--
4
4
  @slot 默认插槽
5
5
  @param {String | Number} record
6
6
  -->
7
- <slot :record="timeData">
8
- <text class="hy-count-down__text">{{ formattedTime }}</text>
9
- </slot>
10
- </view>
7
+ <slot :record="timeData">
8
+ <text class="hy-count-down__text">{{ formattedTime }}</text>
9
+ </slot>
10
+ </view>
11
11
  </template>
12
12
 
13
13
  <script lang="ts">
14
14
  export default {
15
- name: "hy-count-down",
16
- options: {
17
- addGlobalClass: true,
18
- virtualHost: true,
19
- styleIsolation: "shared",
20
- },
21
- };
15
+ name: 'hy-count-down',
16
+ options: {
17
+ addGlobalClass: true,
18
+ virtualHost: true,
19
+ styleIsolation: 'shared'
20
+ }
21
+ }
22
22
  </script>
23
23
 
24
24
  <script setup lang="ts">
25
- import { onMounted, onUnmounted, ref, watch } from "vue";
26
- import type { CSSProperties, PropType } from "vue";
27
- import { isSameSecond, parseFormat, parseTimeData } from "./index";
28
- import type { ICountDownEmits } from "./typing";
25
+ import { onMounted, onUnmounted, ref, watch } from 'vue'
26
+ import { isSameSecond, parseFormat, parseTimeData } from './index'
27
+ import type { ICountDownEmits } from './typing'
28
+ import countDownProps from './props'
29
29
 
30
30
  /**
31
31
  * 一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。
32
32
  * @displayName hy-count-down
33
33
  */
34
- defineOptions({});
34
+ defineOptions({})
35
35
 
36
- // const props = withDefaults(defineProps<IProps>(), defaultProps)
37
- const props = defineProps({
38
- /** 倒计时时长,单位ms */
39
- time: {
40
- type: Number,
41
- default: 0,
42
- },
43
- /** 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 */
44
- format: {
45
- type: String,
46
- default: "HH:mm:ss",
47
- },
48
- /** 是否自动开始倒计时 */
49
- autoStart: {
50
- type: Boolean,
51
- default: true,
52
- },
53
- /** 是否展示毫秒倒计时 */
54
- millisecond: {
55
- type: Boolean,
56
- default: false,
57
- },
58
- /** 定义需要用到的外部样式 */
59
- customStyle: {
60
- type: Object as PropType<CSSProperties>,
61
- },
62
- /** 自定义外部类名 */
63
- customClass: String,
64
- });
65
- const emit = defineEmits<ICountDownEmits>();
36
+ const props = defineProps(countDownProps)
37
+ const emit = defineEmits<ICountDownEmits>()
66
38
 
67
- let timer: any;
39
+ let timer: any
68
40
  // 各单位(天,时,分等)剩余时间
69
- const timeData = ref(parseTimeData(props.time));
41
+ const timeData = ref(parseTimeData(props.time))
70
42
  // 格式化后的时间,如"03:23:21"
71
- const formattedTime = ref("");
43
+ const formattedTime = ref('')
72
44
  // 倒计时是否正在进行中
73
- const runing = ref(false);
45
+ const runing = ref(false)
74
46
  // 结束的毫秒时间戳
75
- const endTime = ref(0);
47
+ const endTime = ref(0)
76
48
  // 剩余的毫秒时间
77
- const remainTime = ref(0);
49
+ const remainTime = ref(0)
78
50
 
79
51
  watch(
80
- () => props.time,
81
- () => reset(),
82
- );
52
+ () => props.time,
53
+ () => reset()
54
+ )
83
55
 
84
56
  onMounted(() => {
85
- reset();
86
- });
57
+ reset()
58
+ })
87
59
 
88
60
  onUnmounted(() => {
89
- clearTimeoutFn();
90
- });
61
+ clearTimeoutFn()
62
+ })
91
63
 
92
64
  /**
93
65
  * @description 开始倒计时
94
66
  */
95
67
  const start = () => {
96
- if (runing.value) return;
97
- // 标识为进行中
98
- runing.value = true;
99
- // 结束时间戳 = 此刻时间戳 + 剩余的时间
100
- endTime.value = Date.now() + remainTime.value;
101
- toTick();
102
- };
68
+ if (runing.value) return
69
+ // 标识为进行中
70
+ runing.value = true
71
+ // 结束时间戳 = 此刻时间戳 + 剩余的时间
72
+ endTime.value = Date.now() + remainTime.value
73
+ toTick()
74
+ }
103
75
 
104
76
  /**
105
77
  * @description 根据是否展示毫秒,执行不同操作函数
106
78
  */
107
79
  const toTick = () => {
108
- if (props.millisecond) {
109
- microTick();
110
- } else {
111
- macroTick();
112
- }
113
- };
114
- const macroTick = () => {
115
- clearTimeoutFn();
116
- // 每隔一定时间,更新一遍定时器的值
117
- // 同时此定时器的作用也能带来毫秒级的更新
118
- timer = setTimeout(() => {
119
- // 获取剩余时间
120
- const remain = getRemainTime();
121
- // 重设剩余时间
122
- if (!isSameSecond(remain, remainTime.value) || remain === 0) {
123
- setRemainTime(remain);
80
+ if (props.millisecond) {
81
+ microTick()
82
+ } else {
83
+ macroTick()
124
84
  }
125
- // 如果剩余时间不为0,则继续检查更新倒计时
126
- if (remainTime.value !== 0) {
127
- macroTick();
128
- }
129
- }, 30);
130
- };
85
+ }
86
+ const macroTick = () => {
87
+ clearTimeoutFn()
88
+ // 每隔一定时间,更新一遍定时器的值
89
+ // 同时此定时器的作用也能带来毫秒级的更新
90
+ timer = setTimeout(() => {
91
+ // 获取剩余时间
92
+ const remain = getRemainTime()
93
+ // 重设剩余时间
94
+ if (!isSameSecond(remain, remainTime.value) || remain === 0) {
95
+ setRemainTime(remain)
96
+ }
97
+ // 如果剩余时间不为0,则继续检查更新倒计时
98
+ if (remainTime.value !== 0) {
99
+ macroTick()
100
+ }
101
+ }, 30)
102
+ }
131
103
 
132
104
  const microTick = () => {
133
- clearTimeoutFn();
134
- timer = setTimeout(() => {
135
- setRemainTime(getRemainTime());
136
- if (remainTime.value !== 0) {
137
- microTick();
138
- }
139
- }, 50);
140
- };
105
+ clearTimeoutFn()
106
+ timer = setTimeout(() => {
107
+ setRemainTime(getRemainTime())
108
+ if (remainTime.value !== 0) {
109
+ microTick()
110
+ }
111
+ }, 50)
112
+ }
141
113
 
142
114
  /**
143
115
  * @description 获取剩余的时间
144
116
  */
145
117
  const getRemainTime = () => {
146
- // 取最大值,防止出现小于0的剩余时间值
147
- return Math.max(endTime.value - Date.now(), 0);
148
- };
118
+ // 取最大值,防止出现小于0的剩余时间值
119
+ return Math.max(endTime.value - Date.now(), 0)
120
+ }
149
121
  /**
150
122
  * @description 设置剩余的时间
151
123
  */
152
124
  const setRemainTime = (remain: number) => {
153
- remainTime.value = remain;
154
- // 根据剩余的毫秒时间,得出该有天,小时,分钟等的值,返回一个对象
155
- timeData.value = parseTimeData(remain);
156
- emit("change", timeData.value);
157
- // 得出格式化后的时间
158
- formattedTime.value = parseFormat(props.format, timeData.value);
159
- // 如果时间已到,停止倒计时
160
- if (remain <= 0) {
161
- pause();
162
- emit("finish");
163
- }
164
- };
125
+ remainTime.value = remain
126
+ // 根据剩余的毫秒时间,得出该有天,小时,分钟等的值,返回一个对象
127
+ timeData.value = parseTimeData(remain)
128
+ emit('change', timeData.value)
129
+ // 得出格式化后的时间
130
+ formattedTime.value = parseFormat(props.format, timeData.value)
131
+ // 如果时间已到,停止倒计时
132
+ if (remain <= 0) {
133
+ pause()
134
+ emit('finish')
135
+ }
136
+ }
165
137
  // 重置倒计时
166
138
  const reset = () => {
167
- pause();
168
- remainTime.value = props.time;
169
- setRemainTime(remainTime.value);
170
- if (props.autoStart) {
171
- start();
172
- }
173
- };
139
+ pause()
140
+ remainTime.value = props.time
141
+ setRemainTime(remainTime.value)
142
+ if (props.autoStart) {
143
+ start()
144
+ }
145
+ }
174
146
  /**
175
147
  * @description 暂停倒计时
176
148
  * */
177
149
  const pause = () => {
178
- runing.value = false;
179
- clearTimeoutFn();
180
- };
150
+ runing.value = false
151
+ clearTimeoutFn()
152
+ }
181
153
  /**
182
154
  * @description 清空定时器
183
155
  * */
184
156
  const clearTimeoutFn = () => {
185
- clearTimeout(timer);
186
- timer = null;
187
- };
157
+ clearTimeout(timer)
158
+ timer = null
159
+ }
188
160
 
189
161
  defineExpose({
190
- reset,
191
- start,
192
- pause,
193
- });
162
+ reset,
163
+ start,
164
+ pause
165
+ })
194
166
  </script>
195
167
 
196
168
  <style scoped lang="scss">
197
- @import "./index.scss";
169
+ @import './index.scss';
198
170
  </style>