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,480 +1,367 @@
1
1
  <template>
2
- <view class="hy-number-box">
3
- <!-- 减号 -->
4
- <view
5
- v-if="showMinus && !hideMinus && $slots.minus"
6
- class="hy-number-box__slot cursor-pointer"
7
- @tap.stop="clickHandler('minus')"
8
- @touchstart="onTouchStart('minus')"
9
- @touchend.stop="onClearTimeout"
10
- >
11
- <slot name="minus" />
12
- </view>
13
- <view
14
- v-else-if="showMinus && !hideMinus"
15
- @tap.stop="clickHandler('minus')"
16
- @touchstart="onTouchStart('minus')"
17
- @touchend.stop="onClearTimeout"
18
- hover-class="hy-number-box__minus--hover"
19
- hover-stay-time="150"
20
- :class="[
21
- { 'hy-number-box__minus--disabled': isDisabled('minus') },
22
- 'hy-number-box__minus',
23
- 'cursor-pointer',
24
- ]"
25
- :style="buttonStyle('minus')"
26
- >
27
- <HyIcon
28
- :name="minusIcon?.name || IconConfig.MINUS"
29
- :color="isDisabled('minus') ? '#c8c9cc' : minusIcon?.color"
30
- :size="minusIcon?.size"
31
- :bold="minusIcon?.bold"
32
- :customPrefix="minusIcon?.customPrefix"
33
- :imgMode="minusIcon?.imgMode"
34
- :width="minusIcon?.width"
35
- :height="minusIcon?.height"
36
- :top="minusIcon?.top"
37
- :stop="minusIcon?.stop"
38
- :round="minusIcon?.round"
39
- :customStyle="minusIcon?.customStyle"
40
- ></HyIcon>
41
- </view>
42
- <!-- 减号 -->
2
+ <view class="hy-number-box">
3
+ <!-- 减号 -->
4
+ <view
5
+ v-if="showMinus && !hideMinus && $slots.minus"
6
+ class="hy-number-box__slot cursor-pointer"
7
+ @tap.stop="clickHandler('minus')"
8
+ @touchstart="onTouchStart('minus')"
9
+ @touchend.stop="onClearTimeout"
10
+ >
11
+ <slot name="minus" />
12
+ </view>
13
+ <view
14
+ v-else-if="showMinus && !hideMinus"
15
+ @tap.stop="clickHandler('minus')"
16
+ @touchstart="onTouchStart('minus')"
17
+ @touchend.stop="onClearTimeout"
18
+ hover-class="hy-number-box__minus--hover"
19
+ hover-stay-time="150"
20
+ :class="[
21
+ { 'hy-number-box__minus--disabled': isDisabled('minus') },
22
+ 'hy-number-box__minus',
23
+ 'cursor-pointer'
24
+ ]"
25
+ :style="buttonStyle('minus')"
26
+ >
27
+ <hy-icon
28
+ :name="minusIcon?.name || IconConfig.MINUS"
29
+ :color="isDisabled('minus') ? '#c8c9cc' : minusIcon?.color"
30
+ :size="minusIcon?.size"
31
+ :bold="minusIcon?.bold"
32
+ :customPrefix="minusIcon?.customPrefix"
33
+ :imgMode="minusIcon?.imgMode"
34
+ :width="minusIcon?.width"
35
+ :height="minusIcon?.height"
36
+ :top="minusIcon?.top"
37
+ :stop="minusIcon?.stop"
38
+ :round="minusIcon?.round"
39
+ :customStyle="minusIcon?.customStyle"
40
+ ></hy-icon>
41
+ </view>
42
+ <!-- 减号 -->
43
43
 
44
- <template v-if="!hideMinus">
45
- <slot name="input" :record="currentValue">
46
- <!-- #ifdef MP-WEIXIN -->
47
- <input
48
- :disabled="disabledInput || disabled"
49
- :cursor-spacing="getCursorSpacing"
50
- :class="[
51
- {
52
- 'hy-number-box__input--disabled': disabled || disabledInput,
53
- },
54
- 'hy-number-box__input',
55
- ]"
56
- :value="currentValue"
57
- @blur="onBlur"
58
- @focus="onFocus"
59
- @input="onInput"
60
- type="number"
61
- :style="[inputStyle]"
62
- />
63
- <!-- #endif -->
64
- <!-- #ifndef MP-WEIXIN -->
65
- <input
66
- :disabled="disabledInput || disabled"
67
- :cursor-spacing="getCursorSpacing"
68
- :class="[
69
- {
70
- 'hy-number-box__input--disabled': disabled || disabledInput,
71
- },
72
- 'hy-number-box__input',
73
- ]"
74
- v-model="currentValue"
75
- @blur="onBlur"
76
- @focus="onFocus"
77
- @input="onInput"
78
- type="number"
79
- :style="[inputStyle]"
80
- />
81
- <!-- #endif -->
82
- </slot>
83
- </template>
44
+ <template v-if="!hideMinus">
45
+ <!-- 中间输入框组件 -->
46
+ <slot v-if="$slots.input" name="input" :record="currentValue"></slot>
47
+ <template v-else>
48
+ <!-- #ifdef MP-WEIXIN -->
49
+ <input
50
+ :disabled="disabledInput || disabled"
51
+ :cursor-spacing="getCursorSpacing"
52
+ :class="[
53
+ {
54
+ 'hy-number-box__input--disabled': disabled || disabledInput
55
+ },
56
+ 'hy-number-box__input'
57
+ ]"
58
+ :value="currentValue"
59
+ @blur="onBlur"
60
+ @focus="onFocus"
61
+ @input="onInput"
62
+ type="number"
63
+ :style="[inputStyle]"
64
+ />
65
+ <!-- #endif -->
66
+ <!-- #ifndef MP-WEIXIN -->
67
+ <input
68
+ :disabled="disabledInput || disabled"
69
+ :cursor-spacing="getCursorSpacing"
70
+ :class="[
71
+ {
72
+ 'hy-number-box__input--disabled': disabled || disabledInput
73
+ },
74
+ 'hy-number-box__input'
75
+ ]"
76
+ v-model="currentValue"
77
+ @blur="onBlur"
78
+ @focus="onFocus"
79
+ @input="onInput"
80
+ type="number"
81
+ :style="[inputStyle]"
82
+ />
83
+ <!-- #endif -->
84
+ </template>
85
+ </template>
84
86
 
85
- <!-- 加号 -->
86
- <view
87
- class="hy-number-box__slot cursor-pointer"
88
- @tap.stop="clickHandler('plus')"
89
- @touchstart="onTouchStart('plus')"
90
- v-if="showPlus && $slots.plus"
91
- @touchend.stop="onClearTimeout"
92
- >
93
- <slot name="plus" />
94
- </view>
95
- <view
96
- v-else-if="showPlus"
97
- @tap.stop="clickHandler('plus')"
98
- @touchstart="onTouchStart('plus')"
99
- @touchend.stop="onClearTimeout"
100
- hover-class="hy-number-box__plus--hover"
101
- hover-stay-time="150"
102
- :class="[
103
- { 'hy-number-box__minus--disabled': isDisabled('plus') },
104
- 'hy-number-box__plus',
105
- 'cursor-pointer',
106
- ]"
107
- :style="[buttonStyle('plus')]"
108
- >
109
- <HyIcon
110
- :name="plusIcon?.name || IconConfig.PLUS"
111
- :color="isDisabled('plus') ? '#c8c9cc' : plusIcon?.color"
112
- :size="plusIcon?.size"
113
- :bold="plusIcon?.bold"
114
- :customPrefix="plusIcon?.customPrefix"
115
- :imgMode="plusIcon?.imgMode"
116
- :width="plusIcon?.width"
117
- :height="plusIcon?.height"
118
- :top="plusIcon?.top"
119
- :stop="plusIcon?.stop"
120
- :round="plusIcon?.round"
121
- :customStyle="plusIcon?.customStyle"
122
- ></HyIcon>
87
+ <!-- 加号 -->
88
+ <view
89
+ class="hy-number-box__slot cursor-pointer"
90
+ @tap.stop="clickHandler('plus')"
91
+ @touchstart="onTouchStart('plus')"
92
+ v-if="showPlus && $slots.plus"
93
+ @touchend.stop="onClearTimeout"
94
+ >
95
+ <slot name="plus" />
96
+ </view>
97
+ <view
98
+ v-else-if="showPlus"
99
+ @tap.stop="clickHandler('plus')"
100
+ @touchstart="onTouchStart('plus')"
101
+ @touchend.stop="onClearTimeout"
102
+ hover-class="hy-number-box__plus--hover"
103
+ hover-stay-time="150"
104
+ :class="[
105
+ { 'hy-number-box__minus--disabled': isDisabled('plus') },
106
+ 'hy-number-box__plus',
107
+ 'cursor-pointer'
108
+ ]"
109
+ :style="[buttonStyle('plus')]"
110
+ >
111
+ <hy-icon
112
+ :name="plusIcon?.name || IconConfig.PLUS"
113
+ :color="isDisabled('plus') ? '#c8c9cc' : plusIcon?.color"
114
+ :size="plusIcon?.size"
115
+ :bold="plusIcon?.bold"
116
+ :customPrefix="plusIcon?.customPrefix"
117
+ :imgMode="plusIcon?.imgMode"
118
+ :width="plusIcon?.width"
119
+ :height="plusIcon?.height"
120
+ :top="plusIcon?.top"
121
+ :stop="plusIcon?.stop"
122
+ :round="plusIcon?.round"
123
+ :customStyle="plusIcon?.customStyle"
124
+ ></hy-icon>
125
+ </view>
126
+ <!-- 加号 -->
123
127
  </view>
124
- <!-- 加号 -->
125
- </view>
126
128
  </template>
127
129
 
128
130
  <script lang="ts">
129
131
  export default {
130
- name: "hy-number-step",
131
- options: {
132
- addGlobalClass: true,
133
- virtualHost: true,
134
- styleIsolation: "shared",
135
- },
136
- };
132
+ name: 'hy-number-step',
133
+ options: {
134
+ addGlobalClass: true,
135
+ virtualHost: true,
136
+ styleIsolation: 'shared'
137
+ }
138
+ }
137
139
  </script>
138
140
 
139
141
  <script setup lang="ts">
140
- import { computed, ref, watch, onMounted, nextTick } from "vue";
141
- import type { CSSProperties, PropType } from "vue";
142
- import { addUnit, IconConfig } from "../../libs";
143
- import type HyIconProps from "../hy-icon/typing";
144
- import type { INumberStepEmits } from "./typing";
142
+ import { computed, ref, watch, onMounted, nextTick } from 'vue'
143
+ import type { CSSProperties } from 'vue'
144
+ import { addUnit, IconConfig } from '../../libs'
145
+ import type { INumberStepEmits } from './typing'
146
+ import type { InputOnBlurEvent, InputOnFocusEvent, InputOnInputEvent } from '@uni-helper/uni-types'
147
+ import numberStepProps from './props'
145
148
  // 组件
146
- import HyIcon from "../hy-icon/hy-icon.vue";
147
- import type {
148
- InputOnBlurEvent,
149
- InputOnFocusEvent,
150
- InputOnInputEvent,
151
- } from "@uni-helper/uni-types";
149
+ import HyIcon from '../hy-icon/hy-icon.vue'
152
150
 
153
151
  /**
154
152
  * 一般用于商城购物选择物品数量的场景
155
153
  * @displayName hy-number-step
156
154
  */
157
- defineOptions({});
155
+ defineOptions({})
158
156
 
159
- // const props = withDefaults(defineProps<IProps>(), defaultProps)
160
- const props = defineProps({
161
- /** 用于双向绑定的值,初始化时设置设为默认min值(最小值) */
162
- modelValue: {
163
- type: Number,
164
- default: 0,
165
- required: true,
166
- },
167
- /** 最小值 */
168
- min: {
169
- type: Number,
170
- default: 1,
171
- },
172
- /** 最大值 */
173
- max: {
174
- type: Number,
175
- default: Number.MAX_SAFE_INTEGER,
176
- },
177
- /** 加减的步长,可为小数 */
178
- step: {
179
- type: Number,
180
- default: 1,
181
- },
182
- /** 是否只允许输入整数 */
183
- integer: {
184
- type: Boolean,
185
- default: false,
186
- },
187
- /** 是否禁用,包括输入框,加减按钮 */
188
- disabled: {
189
- type: Boolean,
190
- default: false,
191
- },
192
- /** 是否禁用输入框 */
193
- disabledInput: {
194
- type: Boolean,
195
- default: false,
196
- },
197
- /** 是否开启异步变更,开启后需要手动控制输入值 */
198
- asyncChange: {
199
- type: Boolean,
200
- default: false,
201
- },
202
- /** 输入框宽度,单位为px */
203
- inputWidth: {
204
- type: [String, Number],
205
- default: 35,
206
- },
207
- /** 是否显示减少按钮 */
208
- showMinus: {
209
- type: Boolean,
210
- default: true,
211
- },
212
- /** 是否显示增加按钮 */
213
- showPlus: {
214
- type: Boolean,
215
- default: true,
216
- },
217
- /** 显示的小数位数 */
218
- decimalLength: Number,
219
- /** 是否开启长按加减手势 */
220
- longPress: {
221
- type: Boolean,
222
- default: true,
223
- },
224
- /** 输入框文字和加减按钮图标的颜色 */
225
- color: String,
226
- /** 按钮宽度 */
227
- buttonWidth: {
228
- type: [String, Number],
229
- default: 30,
230
- },
231
- /** 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 */
232
- buttonSize: {
233
- type: [String, Number],
234
- default: 30,
235
- },
236
- /** 按钮圆角 */
237
- buttonRadius: [String, Number],
238
- /** 输入框和按钮的背景颜色 */
239
- bgColor: String,
240
- /** 输入框背景颜色 */
241
- inputBgColor: String,
242
- /** 指定光标于键盘的距离,避免键盘遮挡输入框,单位px */
243
- cursorSpacing: {
244
- type: Number,
245
- default: 100,
246
- },
247
- /** 是否禁用减少按钮 */
248
- disableMinus: {
249
- type: Boolean,
250
- default: false,
251
- },
252
- /** 是否禁用增加按钮 */
253
- disablePlus: {
254
- type: Boolean,
255
- default: false,
256
- },
257
- /** 减号按钮图标 */
258
- minusIcon: Object as PropType<HyIconProps>,
259
- /** 加号按钮图标 */
260
- plusIcon: Object as PropType<HyIconProps>,
261
- /** 迷你模式 */
262
- miniMode: {
263
- type: Boolean,
264
- default: false,
265
- },
266
- });
267
- const emit = defineEmits<INumberStepEmits>();
268
- type StepType = "plus" | "minus";
157
+ const props = defineProps(numberStepProps)
158
+ const emit = defineEmits<INumberStepEmits>()
159
+ type StepType = 'plus' | 'minus'
269
160
 
270
161
  // 输入框实际操作的值
271
- const currentValue = ref<number>(0);
162
+ const currentValue = ref<number>(0)
272
163
  // 定时器
273
- let longPressTimer: ReturnType<typeof setTimeout> | null = null;
164
+ let longPressTimer: ReturnType<typeof setTimeout> | null = null
274
165
 
275
- const stepType = ref<StepType>("plus");
166
+ const stepType = ref<StepType>('plus')
276
167
 
277
168
  /**
278
169
  * @description 格式化整理数据,限制范围
279
170
  * @param value 处理值
280
171
  * */
281
172
  const format = (value: number | string): number => {
282
- // 如果为空字符串,那么设置为0,同时将值转为Number类型
283
- value = !value ? 0 : +value;
284
- // 对比最大最小值,取在min和max之间的值
285
- value = Math.max(Math.min(props.max, value), props.min);
286
- // 如果设定了最大的小数位数,使用toFixed去进行格式化
287
- if (props.decimalLength !== null) {
288
- value = parseFloat(value.toFixed(props.decimalLength));
289
- }
290
- return value;
291
- };
173
+ // 如果为空字符串,那么设置为0,同时将值转为Number类型
174
+ value = !value ? 0 : +value
175
+ // 对比最大最小值,取在min和max之间的值
176
+ value = Math.max(Math.min(props.max, value), props.min)
177
+ // 如果设定了最大的小数位数,使用toFixed去进行格式化
178
+ if (props.decimalLength !== null) {
179
+ value = parseFloat(value.toFixed(props.decimalLength))
180
+ }
181
+ return value
182
+ }
292
183
 
293
184
  // 用于监听多个值发生变化
294
185
  const watchChange = computed(() => {
295
- return [props.integer, props.decimalLength, props.min, props.max];
296
- });
186
+ return [props.integer, props.decimalLength, props.min, props.max]
187
+ })
297
188
 
298
189
  watch(
299
- () => watchChange.value,
300
- () => check(),
301
- );
190
+ () => watchChange.value,
191
+ () => check()
192
+ )
302
193
  watch(
303
- () => props.modelValue,
304
- (newValue: number) => {
305
- if (newValue !== currentValue.value) {
306
- currentValue.value = format(props.modelValue);
307
- }
308
- },
309
- { immediate: true },
310
- );
194
+ () => props.modelValue,
195
+ (newValue: number) => {
196
+ if (newValue !== currentValue.value) {
197
+ currentValue.value = format(props.modelValue)
198
+ }
199
+ },
200
+ { immediate: true }
201
+ )
311
202
 
312
203
  const hideMinus = computed(() => {
313
- return currentValue.value == 0 && props.miniMode;
314
- });
204
+ return currentValue.value == 0 && props.miniMode
205
+ })
315
206
  const getCursorSpacing = computed(() => {
316
- // 判断传入的单位,如果为px单位,需要转成px
317
- return props.cursorSpacing;
318
- });
207
+ // 判断传入的单位,如果为px单位,需要转成px
208
+ return props.cursorSpacing
209
+ })
319
210
  // 按钮的样式
320
211
  const buttonStyle = computed(() => {
321
- return (type: string) => {
322
- const style: CSSProperties = {
323
- backgroundColor: props.bgColor,
324
- width: addUnit(props.buttonWidth),
325
- height: addUnit(props.buttonSize),
326
- color: props.color,
327
- borderRadius: props.buttonRadius,
328
- };
329
- return style;
330
- };
331
- });
212
+ return (type: string) => {
213
+ const style: CSSProperties = {
214
+ backgroundColor: props.bgColor,
215
+ width: addUnit(props.buttonWidth),
216
+ height: addUnit(props.buttonSize),
217
+ color: props.color,
218
+ borderRadius: props.buttonRadius
219
+ }
220
+ return style
221
+ }
222
+ })
332
223
  // 输入框的样式
333
224
  const inputStyle = computed<CSSProperties>(() => {
334
- // const disabled_1 = props.disabled || disabledInput.value;
335
- return {
336
- color: props.color,
337
- backgroundColor: props.inputBgColor || props.bgColor,
338
- height: addUnit(props.buttonSize),
339
- width: addUnit(props.inputWidth),
340
- };
341
- });
225
+ // const disabled_1 = props.disabled || disabledInput.value;
226
+ return {
227
+ color: props.color,
228
+ backgroundColor: props.inputBgColor || props.bgColor,
229
+ height: addUnit(props.buttonSize),
230
+ width: addUnit(props.inputWidth)
231
+ }
232
+ })
342
233
 
343
234
  const isDisabled = computed(() => {
344
- return (type: string) => {
345
- if (type === "plus") {
346
- // 在点击增加按钮情况下,判断整体的disabled,是否单独禁用增加按钮,以及当前值是否大于最大的允许值
347
- return (
348
- props.disabled || props.disablePlus || currentValue.value >= props.max
349
- );
235
+ return (type: string) => {
236
+ if (type === 'plus') {
237
+ // 在点击增加按钮情况下,判断整体的disabled,是否单独禁用增加按钮,以及当前值是否大于最大的允许值
238
+ return props.disabled || props.disablePlus || currentValue.value >= props.max
239
+ }
240
+ // 点击减少按钮同理
241
+ return props.disabled || props.disableMinus || currentValue.value <= props.min
350
242
  }
351
- // 点击减少按钮同理
352
- return (
353
- props.disabled || props.disableMinus || currentValue.value <= props.min
354
- );
355
- };
356
- });
243
+ })
357
244
 
358
245
  onMounted(() => {
359
- init();
360
- });
246
+ init()
247
+ })
361
248
 
362
249
  const init = () => {
363
- currentValue.value = format(props.modelValue);
364
- };
250
+ currentValue.value = format(props.modelValue)
251
+ }
365
252
  const check = () => {
366
- // 格式化了之后,如果前后的值不相等,那么设置为格式化后的值
367
- const val = format(currentValue.value);
368
- if (val != currentValue.value) {
369
- currentValue.value = val;
370
- emitChange(val);
371
- }
372
- };
253
+ // 格式化了之后,如果前后的值不相等,那么设置为格式化后的值
254
+ const val = format(currentValue.value)
255
+ if (val != currentValue.value) {
256
+ currentValue.value = val
257
+ emitChange(val)
258
+ }
259
+ }
373
260
 
374
261
  /**
375
262
  * @description 输入框活动焦点
376
263
  */
377
264
  const onFocus = (event: InputOnFocusEvent) => {
378
- emit("focus", event.detail.value);
379
- };
265
+ emit('focus', event.detail.value)
266
+ }
380
267
  /**
381
268
  * @description 输入框失去焦点
382
269
  */
383
270
  const onBlur = (event: InputOnBlurEvent) => {
384
- // 对输入值进行格式化
385
- format(Number(event.detail.value));
386
- // 发出blur事件
387
- emit("blur", event.detail.value);
388
- };
271
+ // 对输入值进行格式化
272
+ format(Number(event.detail.value))
273
+ // 发出blur事件
274
+ emit('blur', event.detail.value)
275
+ }
389
276
  /**
390
277
  * @description 输入框值发生变化
391
278
  */
392
279
  const onInput = (e: InputOnInputEvent) => {
393
- const { value = "" } = e.detail || {};
394
- // 为空返回
395
- if (value === "") return;
396
- let formatted = value;
397
- // https://github.com/ijry/uview-plus/issues/613
398
- emitChange(value);
399
- // 最大允许的小数长度
400
- if (props.decimalLength !== null && formatted.indexOf(".") !== -1) {
401
- const pair = formatted.split(".");
402
- formatted = `${pair[0]}.${pair[1].slice(0, props.decimalLength)}`;
403
- }
404
- formatted = format(formatted).toString();
405
- emitChange(formatted);
406
- // #ifdef MP-WEIXIN
407
- return formatted;
408
- // #endif
409
- };
280
+ const { value = '' } = e.detail || {}
281
+ // 为空返回
282
+ if (value === '') return
283
+ let formatted = value
284
+ // https://github.com/ijry/uview-plus/issues/613
285
+ emitChange(value)
286
+ // 最大允许的小数长度
287
+ if (props.decimalLength !== null && formatted.indexOf('.') !== -1) {
288
+ const pair = formatted.split('.')
289
+ formatted = `${pair[0]}.${pair[1].slice(0, props.decimalLength)}`
290
+ }
291
+ formatted = format(formatted).toString()
292
+ emitChange(formatted)
293
+ // #ifdef MP-WEIXIN
294
+ return formatted
295
+ // #endif
296
+ }
410
297
  /**
411
298
  * @description 发出change事件
412
299
  * @param value 值
413
300
  */
414
301
  const emitChange = (value: number | string) => {
415
- // 如果开启了异步变更值,则不修改内部的值,需要用户手动在外部通过v-model变更
416
- if (!props.asyncChange) {
417
- nextTick(() => {
418
- emit("update:modelValue", value);
419
- currentValue.value = Number(value);
420
- // this.$forceUpdate()
421
- });
422
- }
423
- emit("change", value);
424
- };
302
+ // 如果开启了异步变更值,则不修改内部的值,需要用户手动在外部通过v-model变更
303
+ if (!props.asyncChange) {
304
+ nextTick(() => {
305
+ emit('update:modelValue', value)
306
+ currentValue.value = Number(value)
307
+ // this.$forceUpdate()
308
+ })
309
+ }
310
+ emit('change', value)
311
+ }
425
312
  const onChange = () => {
426
- if (isDisabled.value(stepType.value)) {
427
- return emit("overLimit", stepType.value);
428
- }
429
- const diff = stepType.value === "minus" ? -props.step : +props.step;
430
- const value = format(add(+currentValue.value, diff));
431
- emitChange(value);
432
- emit(stepType.value, value);
433
- };
313
+ if (isDisabled.value(stepType.value)) {
314
+ return emit('overLimit', stepType.value)
315
+ }
316
+ const diff = stepType.value === 'minus' ? -props.step : +props.step
317
+ const value = format(add(+currentValue.value, diff))
318
+ emitChange(value)
319
+ emit(stepType.value, value)
320
+ }
434
321
  /**
435
322
  * @description 对值扩大后进行四舍五入,再除以扩大因子,避免出现浮点数操作的精度问题
436
323
  * @param num1
437
324
  * @param num2
438
325
  * */
439
326
  const add = (num1: number, num2: number) => {
440
- const cardinal = Math.pow(10, 10);
441
- return Math.round((num1 + num2) * cardinal) / cardinal;
442
- };
327
+ const cardinal = Math.pow(10, 10)
328
+ return Math.round((num1 + num2) * cardinal) / cardinal
329
+ }
443
330
  // 点击加减按钮
444
331
  const clickHandler = (type: StepType) => {
445
- stepType.value = type;
446
- onChange();
447
- };
332
+ stepType.value = type
333
+ onChange()
334
+ }
448
335
  const longPressStep = () => {
449
- // 每隔一段时间,重新调用longPressStep方法,实现长按加减
450
- onClearTimeout();
451
- longPressTimer = setTimeout(() => {
452
- onChange();
453
- longPressStep();
454
- }, 250);
455
- };
336
+ // 每隔一段时间,重新调用longPressStep方法,实现长按加减
337
+ onClearTimeout()
338
+ longPressTimer = setTimeout(() => {
339
+ onChange()
340
+ longPressStep()
341
+ }, 250)
342
+ }
456
343
  const onTouchStart = (type: StepType) => {
457
- if (!props.longPress) return;
458
- onClearTimeout();
459
- stepType.value = type;
460
- // 一定时间后,默认达到长按状态
461
- longPressTimer = setTimeout(() => {
462
- onChange();
463
- longPressStep();
464
- }, 600);
465
- };
344
+ if (!props.longPress) return
345
+ onClearTimeout()
346
+ stepType.value = type
347
+ // 一定时间后,默认达到长按状态
348
+ longPressTimer = setTimeout(() => {
349
+ onChange()
350
+ longPressStep()
351
+ }, 600)
352
+ }
466
353
  // 触摸结束,清除定时器,停止长按加减
467
354
  const onTouchEnd = () => {
468
- if (!props.longPress) return;
469
- onClearTimeout();
470
- };
355
+ if (!props.longPress) return
356
+ onClearTimeout()
357
+ }
471
358
  // 清除定时器
472
359
  const onClearTimeout = () => {
473
- clearTimeout(longPressTimer as number);
474
- longPressTimer = null;
475
- };
360
+ clearTimeout(longPressTimer as number)
361
+ longPressTimer = null
362
+ }
476
363
  </script>
477
364
 
478
365
  <style lang="scss" scoped>
479
- @import "./index.scss";
366
+ @import './index.scss';
480
367
  </style>