hy-app 0.4.15 → 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 (206) 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/hy-coupon.vue +10 -5
  55. package/components/hy-coupon/index.scss +148 -64
  56. package/components/hy-coupon/props.ts +35 -50
  57. package/components/hy-coupon/typing.d.ts +10 -0
  58. package/components/hy-datetime-picker/hy-datetime-picker.vue +415 -580
  59. package/components/hy-datetime-picker/props.ts +142 -32
  60. package/components/hy-datetime-picker/typing.d.ts +132 -132
  61. package/components/hy-divider/hy-divider.vue +90 -169
  62. package/components/hy-divider/props.ts +78 -19
  63. package/components/hy-divider/typing.d.ts +60 -60
  64. package/components/hy-dropdown/hy-dropdown.vue +37 -71
  65. package/components/hy-dropdown/props.ts +38 -15
  66. package/components/hy-dropdown/typing.d.ts +44 -44
  67. package/components/hy-dropdown-item/hy-dropdown-item.vue +141 -173
  68. package/components/hy-dropdown-item/props.ts +19 -8
  69. package/components/hy-empty/hy-empty.vue +75 -129
  70. package/components/hy-empty/props.ts +57 -15
  71. package/components/hy-empty/typing.d.ts +84 -84
  72. package/components/hy-flex/hy-flex.vue +33 -88
  73. package/components/hy-flex/props.ts +58 -0
  74. package/components/hy-flex/typing.d.ts +14 -16
  75. package/components/hy-float-button/hy-float-button.vue +289 -406
  76. package/components/hy-float-button/props.ts +109 -25
  77. package/components/hy-folding-panel/hy-folding-panel.vue +74 -114
  78. package/components/hy-folding-panel/props.ts +42 -0
  79. package/components/hy-folding-panel/typing.d.ts +57 -57
  80. package/components/hy-folding-panel-item/hy-folding-panel-item.vue +139 -231
  81. package/components/hy-folding-panel-item/props.ts +81 -0
  82. package/components/hy-folding-panel-item/typing.d.ts +23 -23
  83. package/components/hy-form/hy-form.vue +172 -212
  84. package/components/hy-form/props.ts +37 -0
  85. package/components/hy-form/typing.d.ts +68 -61
  86. package/components/hy-form-group/typing.d.ts +74 -74
  87. package/components/hy-form-item/hy-form-item.vue +100 -129
  88. package/components/hy-form-item/props.ts +25 -0
  89. package/components/hy-form-item/typing.d.ts +40 -37
  90. package/components/hy-grid/hy-grid.vue +76 -132
  91. package/components/hy-grid/props.ts +58 -16
  92. package/components/hy-grid/typing.d.ts +66 -66
  93. package/components/hy-icon/hy-icon.vue +84 -161
  94. package/components/hy-icon/props.ts +76 -22
  95. package/components/hy-icon/typing.d.ts +83 -82
  96. package/components/hy-image/hy-image.vue +142 -272
  97. package/components/hy-image/props.ts +105 -23
  98. package/components/hy-image/typing.d.ts +84 -87
  99. package/components/hy-input/hy-input.vue +230 -421
  100. package/components/hy-input/props.ts +183 -35
  101. package/components/hy-input/typing.d.ts +169 -169
  102. package/components/hy-line/hy-line.vue +34 -72
  103. package/components/hy-line/props.ts +41 -10
  104. package/components/hy-line/typing.d.ts +29 -29
  105. package/components/hy-line-progress/hy-line-progress.vue +66 -101
  106. package/components/hy-line-progress/props.ts +31 -10
  107. package/components/hy-line-progress/typing.d.ts +29 -29
  108. package/components/hy-list/hy-list.vue +151 -220
  109. package/components/hy-list/props.ts +67 -16
  110. package/components/hy-list/typing.d.ts +52 -52
  111. package/components/hy-loading/hy-loading.vue +63 -119
  112. package/components/hy-loading/props.ts +63 -15
  113. package/components/hy-loading/typing.d.ts +49 -49
  114. package/components/hy-menu/hy-menu.vue +124 -166
  115. package/components/hy-menu/props.ts +42 -10
  116. package/components/hy-menu/typing.d.ts +60 -60
  117. package/components/hy-modal/hy-modal.vue +127 -218
  118. package/components/hy-modal/props.ts +89 -24
  119. package/components/hy-navbar/hy-navbar.vue +104 -177
  120. package/components/hy-navbar/props.ts +76 -22
  121. package/components/hy-navbar/typing.d.ts +81 -81
  122. package/components/hy-notice-bar/hy-notice-bar.vue +67 -144
  123. package/components/hy-notice-bar/props.ts +80 -19
  124. package/components/hy-notice-bar/typing.d.ts +62 -62
  125. package/components/hy-notify/hy-notify.vue +128 -177
  126. package/components/hy-notify/props.ts +49 -12
  127. package/components/hy-notify/typing.d.ts +45 -41
  128. package/components/hy-number-step/hy-number-step.vue +281 -394
  129. package/components/hy-number-step/props.ts +110 -27
  130. package/components/hy-number-step/typing.d.ts +120 -120
  131. package/components/hy-overlay/hy-overlay.vue +39 -66
  132. package/components/hy-overlay/props.ts +31 -8
  133. package/components/hy-pagination/hy-pagination.vue +100 -155
  134. package/components/hy-pagination/props.ts +53 -13
  135. package/components/hy-picker/hy-picker.vue +309 -430
  136. package/components/hy-picker/index.scss +8 -12
  137. package/components/hy-picker/props.ts +110 -26
  138. package/components/hy-popover/hy-popover.vue +190 -252
  139. package/components/hy-popover/props.ts +48 -10
  140. package/components/hy-popup/hy-popup.vue +162 -248
  141. package/components/hy-popup/props.ts +82 -18
  142. package/components/hy-price/hy-price.vue +45 -104
  143. package/components/hy-price/props.ts +52 -12
  144. package/components/hy-price/typing.d.ts +41 -36
  145. package/components/hy-qrcode/hy-qrcode.vue +115 -185
  146. package/components/hy-qrcode/props.ts +68 -18
  147. package/components/hy-qrcode/typing.d.ts +67 -66
  148. package/components/hy-radio/hy-radio.vue +161 -259
  149. package/components/hy-radio/props.ts +95 -25
  150. package/components/hy-radio/typing.d.ts +85 -84
  151. package/components/hy-rate/hy-rate.vue +185 -270
  152. package/components/hy-rate/props.ts +76 -18
  153. package/components/hy-rate/typing.d.ts +61 -60
  154. package/components/hy-read-more/hy-read-more.vue +93 -136
  155. package/components/hy-read-more/props.ts +43 -13
  156. package/components/hy-scroll-list/hy-scroll-list.vue +81 -102
  157. package/components/hy-scroll-list/props.ts +22 -11
  158. package/components/hy-search/hy-search.vue +155 -284
  159. package/components/hy-search/props.ts +130 -25
  160. package/components/hy-signature/hy-signature.vue +491 -635
  161. package/components/hy-signature/props.ts +115 -26
  162. package/components/hy-signature/typing.d.ts +138 -138
  163. package/components/hy-slider/hy-slider.vue +388 -477
  164. package/components/hy-slider/props.ts +75 -19
  165. package/components/hy-steps/hy-steps.vue +212 -279
  166. package/components/hy-steps/props.ts +47 -13
  167. package/components/hy-submit-bar/hy-submit-bar.vue +136 -221
  168. package/components/hy-submit-bar/props.ts +89 -20
  169. package/components/hy-submit-bar/typing.d.ts +87 -87
  170. package/components/hy-subsection/hy-subsection.vue +132 -185
  171. package/components/hy-subsection/props.ts +50 -17
  172. package/components/hy-subsection/typing.d.ts +52 -52
  173. package/components/hy-swipe-action/hy-swipe-action.vue +228 -283
  174. package/components/hy-swipe-action/props.ts +43 -18
  175. package/components/hy-swipe-action/typing.d.ts +46 -46
  176. package/components/hy-swiper/hy-swiper.vue +159 -286
  177. package/components/hy-swiper/props.ts +126 -28
  178. package/components/hy-swiper/typing.d.ts +115 -115
  179. package/components/hy-switch/hy-switch.vue +112 -176
  180. package/components/hy-switch/props.ts +60 -15
  181. package/components/hy-switch/typing.d.ts +63 -63
  182. package/components/hy-tabBar/hy-tabBar.vue +64 -60
  183. package/components/hy-tabs/hy-tabs.vue +277 -380
  184. package/components/hy-tabs/props.ts +75 -18
  185. package/components/hy-tag/hy-tag.vue +111 -204
  186. package/components/hy-tag/props.ts +81 -19
  187. package/components/hy-text/hy-text.vue +200 -322
  188. package/components/hy-text/props.ts +107 -28
  189. package/components/hy-textarea/hy-textarea.vue +147 -256
  190. package/components/hy-textarea/props.ts +112 -25
  191. package/components/hy-textarea/typing.d.ts +42 -42
  192. package/components/hy-toast/hy-toast.vue +135 -143
  193. package/components/hy-tooltip/hy-tooltip.vue +220 -306
  194. package/components/hy-tooltip/props.ts +79 -15
  195. package/components/hy-transition/hy-transition.vue +111 -138
  196. package/components/hy-transition/props.ts +30 -8
  197. package/components/hy-upload/hy-upload.vue +320 -469
  198. package/components/hy-upload/props.ts +130 -27
  199. package/components/hy-warn/hy-warn.vue +80 -129
  200. package/components/hy-warn/props.ts +47 -12
  201. package/components/hy-waterfall/hy-waterfall.vue +139 -163
  202. package/components/hy-waterfall/props.ts +19 -7
  203. package/components/hy-watermark/hy-watermark.vue +762 -870
  204. package/components/hy-watermark/props.ts +103 -22
  205. package/package.json +2 -2
  206. package/web-types.json +1 -1
@@ -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