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,314 +1,231 @@
1
1
  <template>
2
- <view class="hy-code-input">
3
- <view
4
- :class="itemClass(index)"
5
- :style="[itemStyle(index)]"
6
- v-for="(item, index) in codeLength"
7
- :key="index"
8
- >
9
- <view
10
- class="hy-code-input--item__dot"
11
- v-if="dot && current > index"
12
- :style="{ color: color }"
13
- ></view>
14
- <text
15
- v-else
16
- class="hy-code-input--item__text"
17
- :style="{
18
- fontSize: addUnit(fontSize),
19
- fontWeight: bold ? 'bold' : 'normal',
20
- color: color,
21
- }"
22
- >
23
- {{ codeArray[index] }}
24
- </text>
2
+ <view class="hy-code-input">
3
+ <view
4
+ :class="itemClass(index)"
5
+ :style="[itemStyle(index)]"
6
+ v-for="(item, index) in codeLength"
7
+ :key="index"
8
+ >
9
+ <view
10
+ class="hy-code-input--item__dot"
11
+ v-if="dot && current > index"
12
+ :style="{ color: color }"
13
+ ></view>
14
+ <text
15
+ v-else
16
+ class="hy-code-input--item__text"
17
+ :style="{
18
+ fontSize: addUnit(fontSize),
19
+ fontWeight: bold ? 'bold' : 'normal',
20
+ color: color
21
+ }"
22
+ >
23
+ {{ codeArray[index] }}
24
+ </text>
25
+ </view>
26
+ <input
27
+ :disabled="disabledKeyboard"
28
+ type="number"
29
+ :focus="focus"
30
+ :value="inputValue"
31
+ :maxlength="maxlength"
32
+ :adjustPosition="adjustPosition"
33
+ class="hy-code-input__input"
34
+ @input="inputHandler"
35
+ :style="{
36
+ height: boxSize
37
+ }"
38
+ @focus="isFocus = true"
39
+ @blur="isFocus = false"
40
+ />
25
41
  </view>
26
- <input
27
- :disabled="disabledKeyboard"
28
- type="number"
29
- :focus="focus"
30
- :value="inputValue"
31
- :maxlength="maxlength"
32
- :adjustPosition="adjustPosition"
33
- class="hy-code-input__input"
34
- @input="inputHandler"
35
- :style="{
36
- height: boxSize,
37
- }"
38
- @focus="isFocus = true"
39
- @blur="isFocus = false"
40
- />
41
- </view>
42
42
  </template>
43
43
 
44
44
  <script lang="ts">
45
45
  export default {
46
- name: "hy-code-input",
47
- options: {
48
- addGlobalClass: true,
49
- virtualHost: true,
50
- styleIsolation: "shared",
51
- },
52
- };
46
+ name: 'hy-code-input',
47
+ options: {
48
+ addGlobalClass: true,
49
+ virtualHost: true,
50
+ styleIsolation: 'shared'
51
+ }
52
+ }
53
53
  </script>
54
54
 
55
55
  <script setup lang="ts">
56
- import { computed, nextTick, onUnmounted, ref, watch } from "vue";
57
- import type { CSSProperties, PropType } from "vue";
58
- import type { ICodeInputEmits } from "./typing";
59
- import { addUnit, getPx } from "../../libs";
60
- import type { InputOnInputEvent } from "@uni-helper/uni-types";
56
+ import { computed, nextTick, onUnmounted, ref, watch } from 'vue'
57
+ import type { CSSProperties } from 'vue'
58
+ import type { ICodeInputEmits } from './typing'
59
+ import { addUnit, getPx } from '../../libs'
60
+ import type { InputOnInputEvent } from '@uni-helper/uni-types'
61
+ import codeInputProps from './props'
61
62
 
62
63
  /**
63
64
  * 一般用于验证用户短信验证码的场景,也可以结合华玥的键盘组件使用
64
65
  * @displayName hy-code-input
65
66
  */
66
- defineOptions({});
67
+ defineOptions({})
67
68
 
68
- // const props = withDefaults(defineProps<IProps>(), defaultProps)
69
- const props = defineProps({
70
- /** 获取值 */
71
- modelValue: {
72
- type: [String, Number],
73
- required: true,
74
- },
75
- /** 键盘弹起时,是否自动上推页面 */
76
- adjustPosition: {
77
- type: Boolean,
78
- default: true,
79
- },
80
- /** 最大输入长度 */
81
- maxlength: {
82
- type: Number,
83
- default: 6,
84
- },
85
- /** 显示border */
86
- border: {
87
- type: Boolean,
88
- default: true,
89
- },
90
- /** 是否用圆点填充 */
91
- dot: {
92
- type: Boolean,
93
- default: false,
94
- },
95
- /**
96
- * 示模式,box-盒子模式,line-底部横线模式
97
- * @values box,line
98
- * */
99
- mode: {
100
- type: String,
101
- default: "box",
102
- },
103
- /** 是否细边框 */
104
- hairline: {
105
- type: Boolean,
106
- default: false,
107
- },
108
- /** 字符间的距离 */
109
- space: {
110
- type: Number,
111
- default: 10,
112
- },
113
- /** 是否自动获取焦点 */
114
- focus: {
115
- type: Boolean,
116
- default: false,
117
- },
118
- /** 字体是否加粗 */
119
- bold: {
120
- type: Boolean,
121
- default: false,
122
- },
123
- /** 字体颜色 */
124
- color: String,
125
- /** 字体大小,单位px */
126
- fontSize: {
127
- type: [String, Number],
128
- default: 18,
129
- },
130
- /** 输入框的大小,宽等于高 */
131
- size: {
132
- type: [String, Number],
133
- default: 35,
134
- },
135
- /** 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true */
136
- disabledKeyboard: {
137
- type: Boolean,
138
- default: false,
139
- },
140
- /** 边框和线条颜色 */
141
- borderColor: String,
142
- /** 是否禁止输入"."符号 */
143
- disabledDot: {
144
- type: Boolean,
145
- default: true,
146
- },
147
- /** 定义需要用到的外部样式 */
148
- customStyle: {
149
- type: Object as PropType<CSSProperties>,
150
- },
151
- });
152
- const emit = defineEmits<ICodeInputEmits>();
69
+ const props = defineProps(codeInputProps)
70
+ const emit = defineEmits<ICodeInputEmits>()
153
71
 
154
- const current = ref(0);
155
- const inputValue = ref("");
156
- const isFocus = ref(props.focus);
157
- let timer: ReturnType<typeof setInterval>;
158
- const opacity = ref(1);
159
- const borderWidth = computed(() => (props.hairline ? "0.5px" : "2px"));
160
- const lineHeight = computed(() => (props.hairline ? "2px" : "4px"));
161
- const boxSize = addUnit(props.size);
72
+ const current = ref(0)
73
+ const inputValue = ref('')
74
+ const isFocus = ref(props.focus)
75
+ let timer: ReturnType<typeof setInterval>
76
+ const opacity = ref(1)
77
+ const borderWidth = computed(() => (props.hairline ? '0.5px' : '2px'))
78
+ const lineHeight = computed(() => (props.hairline ? '2px' : '4px'))
79
+ const boxSize = addUnit(props.size)
162
80
 
163
81
  watch(
164
- () => props.modelValue,
165
- (newValue: string | number) => {
166
- inputValue.value = String(newValue).substring(0, props.maxlength);
167
- current.value = newValue.toString().length;
168
- },
169
- { immediate: true },
170
- );
82
+ () => props.modelValue,
83
+ (newValue: string | number) => {
84
+ inputValue.value = String(newValue).substring(0, props.maxlength)
85
+ current.value = newValue.toString().length
86
+ },
87
+
88
+ { immediate: true }
89
+ )
171
90
 
172
91
  watch(
173
- () => isFocus.value,
174
- (newValue) => {
175
- // #ifdef APP-NVUE
176
- if (newValue) {
177
- timer = setInterval(() => {
178
- opacity.value = Math.abs(opacity.value - 1);
179
- }, 600);
180
- } else {
181
- clearInterval(timer);
92
+ () => isFocus.value,
93
+ (newValue) => {
94
+ // #ifdef APP-NVUE
95
+ if (newValue) {
96
+ timer = setInterval(() => {
97
+ opacity.value = Math.abs(opacity.value - 1)
98
+ }, 600)
99
+ } else {
100
+ clearInterval(timer)
101
+ }
102
+ // #endif
182
103
  }
183
- // #endif
184
- },
185
- );
104
+ )
186
105
 
187
106
  onUnmounted(() => {
188
- // #ifdef APP-NVUE
189
- clearInterval(timer);
190
- // #endif
191
- });
107
+ // #ifdef APP-NVUE
108
+ clearInterval(timer)
109
+ // #endif
110
+ })
192
111
 
193
112
  // 根据长度,循环输入框的个数,因为头条小程序数值不能用于v-for
194
113
  const codeLength = computed(() => {
195
- return new Array(Number(props.maxlength));
196
- });
114
+ return new Array(Number(props.maxlength))
115
+ })
197
116
  // 循环item的样式
198
117
  const itemStyle = computed(() => {
199
- return (index: number) => {
200
- const style: CSSProperties = {
201
- width: boxSize,
202
- height: boxSize,
203
- };
204
- if (props.borderColor) {
205
- style["--hy-border-color"] = props.borderColor;
206
- }
207
- // 盒子模式下,需要额外进行处理
208
- if (props.mode === "box" && props.border) {
209
- // 设置盒子的边框,如果是细边框,则设置为1px宽度
210
- style.borderWidth = borderWidth.value;
211
- style.borderStyle = "solid";
212
- style.borderColor = props.borderColor;
213
- // 如果盒子间距为0的话
214
- if (getPx(props.space) === 0) {
215
- // 给第一和最后一个盒子设置圆角
216
- if (index === 0) {
217
- style.borderTopLeftRadius = "6px";
218
- style.borderBottomLeftRadius = "6px";
118
+ return (index: number) => {
119
+ const style: CSSProperties = {
120
+ width: boxSize,
121
+ height: boxSize
122
+ }
123
+ if (props.borderColor) {
124
+ style['--hy-border-color'] = props.borderColor
219
125
  }
220
- if (index === codeLength.value.length - 1) {
221
- style.borderTopRightRadius = "6px";
222
- style.borderBottomRightRadius = "6px";
126
+ // 盒子模式下,需要额外进行处理
127
+ if (props.mode === 'box' && props.border) {
128
+ // 设置盒子的边框,如果是细边框,则设置为1px宽度
129
+ style.borderWidth = borderWidth.value
130
+ style.borderStyle = 'solid'
131
+ style.borderColor = props.borderColor
132
+ // 如果盒子间距为0的话
133
+ if (getPx(props.space) === 0) {
134
+ // 给第一和最后一个盒子设置圆角
135
+ if (index === 0) {
136
+ style.borderTopLeftRadius = '6px'
137
+ style.borderBottomLeftRadius = '6px'
138
+ }
139
+ if (index === codeLength.value.length - 1) {
140
+ style.borderTopRightRadius = '6px'
141
+ style.borderBottomRightRadius = '6px'
142
+ }
143
+ // 最后一个盒子的右边框需要保留
144
+ if (index !== codeLength.value.length - 1) {
145
+ style.borderRight = 'none'
146
+ }
147
+ }
223
148
  }
224
- // 最后一个盒子的右边框需要保留
225
149
  if (index !== codeLength.value.length - 1) {
226
- style.borderRight = "none";
150
+ // 设置验证码字符之间的距离,通过margin-right设置,最后一个字符,无需右边框
151
+ style.marginRight = addUnit(props.space)
152
+ } else {
153
+ // 最后一个盒子的有边框需要保留
154
+ style.marginRight = 0
227
155
  }
228
- }
229
- }
230
- if (index !== codeLength.value.length - 1) {
231
- // 设置验证码字符之间的距离,通过margin-right设置,最后一个字符,无需右边框
232
- style.marginRight = addUnit(props.space);
233
- } else {
234
- // 最后一个盒子的有边框需要保留
235
- style.marginRight = 0;
236
- }
237
156
 
238
- return style;
239
- };
240
- });
157
+ return style
158
+ }
159
+ })
241
160
 
242
161
  const itemClass = computed(() => {
243
- return (index: number) => {
244
- return [
245
- "hy-code-input--item",
246
- props.border
247
- ? `hy-code-input--item__${props.mode}`
248
- : "hy-code-input--item__no",
249
- current.value > index &&
250
- getPx(props.space) != 0 &&
251
- props.border &&
252
- `hy-code-input--item__${props.mode}__border`,
253
- isFocus.value &&
254
- current.value === index &&
255
- getPx(props.space) != 0 &&
256
- (props.border
257
- ? `hy-code-input--item__${props.mode}__active`
258
- : "hy-code-input--item__no--active"),
259
- ];
260
- };
261
- });
162
+ return (index: number) => {
163
+ return [
164
+ 'hy-code-input--item',
165
+ props.border ? `hy-code-input--item__${props.mode}` : 'hy-code-input--item__no',
166
+ current.value > index &&
167
+ getPx(props.space) != 0 &&
168
+ props.border &&
169
+ `hy-code-input--item__${props.mode}__border`,
170
+ isFocus.value &&
171
+ current.value === index &&
172
+ getPx(props.space) != 0 &&
173
+ (props.border
174
+ ? `hy-code-input--item__${props.mode}__active`
175
+ : 'hy-code-input--item__no--active')
176
+ ]
177
+ }
178
+ })
262
179
 
263
180
  /**
264
181
  * @description 将输入的值,转为数组,给item历遍时,根据当前的索引显示数组的元素
265
182
  */
266
183
  const codeArray = computed(() => {
267
- return String(inputValue.value).split("");
268
- });
184
+ return String(inputValue.value).split('')
185
+ })
269
186
 
270
187
  /**
271
188
  * @description 监听输入框的值发生变化
272
189
  * */
273
190
  const inputHandler = (e: InputOnInputEvent) => {
274
- const value = e.detail.value;
275
- inputValue.value = value;
276
- // 是否允许输入“.”符号
277
- if (props.disabledDot) {
278
- nextTick(() => {
279
- inputValue.value = value.replace(".", "");
280
- });
281
- }
282
- // 未达到maxlength之前,发送change事件,达到后发送finish事件
283
- emit("change", value);
284
- // 修改通过v-model双向绑定的值
285
- emit("update:modelValue", value);
286
- // 达到用户指定输入长度时,发出完成事件
287
- if (String(value).length >= Number(props.maxlength)) {
288
- emit("finish", value);
289
- }
290
- };
191
+ const value = e.detail.value
192
+ inputValue.value = value
193
+ // 是否允许输入“.”符号
194
+ if (props.disabledDot) {
195
+ nextTick(() => {
196
+ inputValue.value = value.replace('.', '')
197
+ })
198
+ }
199
+ // 未达到maxlength之前,发送change事件,达到后发送finish事件
200
+ emit('change', value)
201
+ // 修改通过v-model双向绑定的值
202
+ emit('update:modelValue', value)
203
+ // 达到用户指定输入长度时,发出完成事件
204
+ if (String(value).length >= Number(props.maxlength)) {
205
+ emit('finish', value)
206
+ }
207
+ }
291
208
  </script>
292
209
 
293
210
  <style scoped lang="scss">
294
- @import "./index.scss";
295
- @import "../../libs/css/mixin.scss";
296
- @import "../../libs/css/theme";
211
+ @import './index.scss';
212
+ @import '../../libs/css/mixin.scss';
213
+ @import '../../libs/css/theme';
297
214
  @include b(code-input) {
298
- @include m(item) {
299
- &__box {
300
- &__active {
301
- width: v-bind(boxSize);
302
- height: v-bind(boxSize);
303
- border-width: v-bind(borderWidth);
304
- }
305
- }
306
- &__line {
307
- &::after {
308
- height: v-bind(lineHeight);
309
- background-color: $hy-border-color;
310
- }
215
+ @include m(item) {
216
+ &__box {
217
+ &__active {
218
+ width: v-bind(boxSize);
219
+ height: v-bind(boxSize);
220
+ border-width: v-bind(borderWidth);
221
+ }
222
+ }
223
+ &__line {
224
+ &::after {
225
+ height: v-bind(lineHeight);
226
+ background-color: $hy-border-color;
227
+ }
228
+ }
311
229
  }
312
- }
313
230
  }
314
231
  </style>
@@ -1,22 +1,88 @@
1
1
  import type IProps from './typing'
2
+ import type { CSSProperties, PropType } from 'vue'
2
3
 
3
- const defaultProps: IProps = {
4
- modelValue: '',
5
- adjustPosition: true,
6
- maxlength: 6,
7
- border: true,
8
- dot: false,
9
- mode: 'box',
10
- hairline: false,
11
- space: 10,
12
- focus: false,
13
- bold: false,
14
- color: '',
15
- fontSize: 18,
16
- size: 35,
17
- disabledKeyboard: false,
18
- borderColor: '',
19
- disabledDot: true,
4
+ const codeInputProps = {
5
+ /** 获取值 */
6
+ modelValue: {
7
+ type: [String, Number],
8
+ required: true
9
+ },
10
+ /** 键盘弹起时,是否自动上推页面 */
11
+ adjustPosition: {
12
+ type: Boolean,
13
+ default: true
14
+ },
15
+ /** 最大输入长度 */
16
+ maxlength: {
17
+ type: Number,
18
+ default: 6
19
+ },
20
+ /** 显示border */
21
+ border: {
22
+ type: Boolean,
23
+ default: true
24
+ },
25
+ /** 是否用圆点填充 */
26
+ dot: {
27
+ type: Boolean,
28
+ default: false
29
+ },
30
+ /**
31
+ * 示模式,box-盒子模式,line-底部横线模式
32
+ * @values box,line
33
+ * */
34
+ mode: {
35
+ type: String,
36
+ default: 'box'
37
+ },
38
+ /** 是否细边框 */
39
+ hairline: {
40
+ type: Boolean,
41
+ default: false
42
+ },
43
+ /** 字符间的距离 */
44
+ space: {
45
+ type: Number,
46
+ default: 10
47
+ },
48
+ /** 是否自动获取焦点 */
49
+ focus: {
50
+ type: Boolean,
51
+ default: false
52
+ },
53
+ /** 字体是否加粗 */
54
+ bold: {
55
+ type: Boolean,
56
+ default: false
57
+ },
58
+ /** 字体颜色 */
59
+ color: String,
60
+ /** 字体大小,单位px */
61
+ fontSize: {
62
+ type: [String, Number],
63
+ default: 18
64
+ },
65
+ /** 输入框的大小,宽等于高 */
66
+ size: {
67
+ type: [String, Number],
68
+ default: 35
69
+ },
70
+ /** 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true */
71
+ disabledKeyboard: {
72
+ type: Boolean,
73
+ default: false
74
+ },
75
+ /** 边框和线条颜色 */
76
+ borderColor: String,
77
+ /** 是否禁止输入"."符号 */
78
+ disabledDot: {
79
+ type: Boolean,
80
+ default: true
81
+ },
82
+ /** 定义需要用到的外部样式 */
83
+ customStyle: {
84
+ type: Object as PropType<CSSProperties>
85
+ }
20
86
  }
21
87
 
22
- export default defaultProps
88
+ export default codeInputProps