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,350 +1,221 @@
1
1
  <template>
2
- <view
3
- :class="['hy-search', customStyle]"
4
- @tap="clickHandler"
5
- :style="[
6
- {
7
- margin: margin,
8
- },
9
- customStyle,
10
- ]"
11
- >
12
2
  <view
13
- class="hy-search__content"
14
- :style="{
15
- backgroundColor: bgColor,
16
- borderRadius: shape == 'circle' ? '100px' : '4px',
17
- borderColor: borderColor,
18
- }"
19
- >
20
- <template>
21
- <slot v-if="$slots.label" name="label"></slot>
22
- <text v-else-if="label" class="hy-search__content__label">{{
23
- label
24
- }}</text>
25
- </template>
26
- <view class="hy-search__content__icon" v-if="searchIcon">
27
- <HyIcon
28
- :name="searchIcon?.name || IconConfig.SEARCH"
29
- :size="searchIcon?.size"
30
- :color="searchIcon?.color || color"
31
- :bold="searchIcon?.bold"
32
- :customPrefix="searchIcon?.customPrefix"
33
- :imgMode="searchIcon?.imgMode"
34
- :width="searchIcon?.width"
35
- :height="searchIcon?.height"
36
- :top="searchIcon?.top"
37
- :stop="searchIcon?.stop"
38
- :round="searchIcon?.round"
39
- :customStyle="searchIcon?.customStyle"
40
- @tap="clickIcon"
41
- ></HyIcon>
42
- </view>
43
- <input
44
- :confirm-type="confirmType"
45
- :value="keyword"
46
- :disabled="disabled"
47
- :maxlength="maxlength"
48
- :adjust-position="adjustPosition"
49
- :focus="autoFocus"
50
- :auto-blur="autoBlur"
51
- placeholder-class="hy-search__content__input--placeholder"
52
- :placeholder="placeholder"
53
- :placeholder-style="`color: ${placeholderColor}`"
54
- :class="[
55
- 'hy-search__content__input',
56
- disabled && 'hy-search__content__input--disabled',
57
- ]"
58
- type="text"
59
- :always-embed="true"
3
+ :class="['hy-search', customStyle]"
4
+ @tap="clickHandler"
60
5
  :style="[
61
- {
62
- pointerEvents: disabled ? 'none' : 'auto',
63
- textAlign: inputAlign,
64
- color: color,
65
- backgroundColor: bgColor,
66
- height: addUnit(height),
67
- },
68
- inputStyle,
6
+ {
7
+ margin: margin
8
+ },
9
+ customStyle
69
10
  ]"
70
- @blur="onBlur"
71
- @focus="onFocus"
72
- @confirm="onSearch"
73
- @input="inputChange"
74
- />
75
- <view
76
- class="hy-search__content__icon hy-search__content__close"
77
- v-if="showClear"
78
- @click="onClear"
79
- >
80
- <HyIcon :name="IconConfig.CLOSE"></HyIcon>
81
- </view>
82
- </view>
83
- <text
84
- :style="[actionStyle]"
85
- class="hy-search__action"
86
- :class="[(showActionBtn || show) && 'hy-search__action--active']"
87
- @tap.stop.prevent="onConfirm"
88
11
  >
89
- {{ actionText }}
90
- </text>
91
- </view>
12
+ <view
13
+ class="hy-search__content"
14
+ :style="{
15
+ backgroundColor: bgColor,
16
+ borderRadius: shape == 'circle' ? '100px' : '4px',
17
+ borderColor: borderColor
18
+ }"
19
+ >
20
+ <template>
21
+ <slot v-if="$slots.label" name="label"></slot>
22
+ <text v-else-if="label" class="hy-search__content__label">{{ label }}</text>
23
+ </template>
24
+ <view class="hy-search__content__icon" v-if="searchIcon">
25
+ <hy-icon
26
+ :name="searchIcon?.name || IconConfig.SEARCH"
27
+ :size="searchIcon?.size"
28
+ :color="searchIcon?.color || color"
29
+ :bold="searchIcon?.bold"
30
+ :customPrefix="searchIcon?.customPrefix"
31
+ :imgMode="searchIcon?.imgMode"
32
+ :width="searchIcon?.width"
33
+ :height="searchIcon?.height"
34
+ :top="searchIcon?.top"
35
+ :stop="searchIcon?.stop"
36
+ :round="searchIcon?.round"
37
+ :customStyle="searchIcon?.customStyle"
38
+ @tap="clickIcon"
39
+ ></hy-icon>
40
+ </view>
41
+ <input
42
+ :confirm-type="confirmType"
43
+ :value="keyword"
44
+ :disabled="disabled"
45
+ :maxlength="maxlength"
46
+ :adjust-position="adjustPosition"
47
+ :focus="autoFocus"
48
+ :auto-blur="autoBlur"
49
+ placeholder-class="hy-search__content__input--placeholder"
50
+ :placeholder="placeholder"
51
+ :placeholder-style="`color: ${placeholderColor}`"
52
+ :class="[
53
+ 'hy-search__content__input',
54
+ disabled && 'hy-search__content__input--disabled'
55
+ ]"
56
+ type="text"
57
+ :always-embed="true"
58
+ :style="[
59
+ {
60
+ pointerEvents: disabled ? 'none' : 'auto',
61
+ textAlign: inputAlign,
62
+ color: color,
63
+ backgroundColor: bgColor,
64
+ height: addUnit(height)
65
+ },
66
+ inputStyle
67
+ ]"
68
+ @blur="onBlur"
69
+ @focus="onFocus"
70
+ @confirm="onSearch"
71
+ @input="inputChange"
72
+ />
73
+ <view
74
+ class="hy-search__content__icon hy-search__content__close"
75
+ v-if="showClear"
76
+ @click="onClear"
77
+ >
78
+ <hy-icon :name="IconConfig.CLOSE"></hy-icon>
79
+ </view>
80
+ </view>
81
+ <text
82
+ :style="[actionStyle]"
83
+ class="hy-search__action"
84
+ :class="[(showActionBtn || show) && 'hy-search__action--active']"
85
+ @tap.stop.prevent="onConfirm"
86
+ >
87
+ {{ actionText }}
88
+ </text>
89
+ </view>
92
90
  </template>
93
91
 
94
92
  <script lang="ts">
95
93
  export default {
96
- name: "hy-search",
97
- options: {
98
- addGlobalClass: true,
99
- virtualHost: true,
100
- styleIsolation: "shared",
101
- },
102
- };
94
+ name: 'hy-search',
95
+ options: {
96
+ addGlobalClass: true,
97
+ virtualHost: true,
98
+ styleIsolation: 'shared'
99
+ }
100
+ }
103
101
  </script>
104
102
 
105
103
  <script setup lang="ts">
106
- import { computed, nextTick, ref, watch } from "vue";
107
- import type { PropType, CSSProperties } from "vue";
108
- import type { ISearchEmits } from "./typing";
109
- import { addUnit, IconConfig } from "../../libs";
110
- import type HyIconProps from "../hy-icon/typing";
104
+ import { computed, nextTick, ref, watch } from 'vue'
105
+ import type { ISearchEmits } from './typing'
106
+ import { addUnit, IconConfig } from '../../libs'
111
107
  import type {
112
- InputOnBlurEvent,
113
- InputOnConfirmEvent,
114
- InputOnFocusEvent,
115
- InputOnInputEvent,
116
- InputConfirmType,
117
- } from "@uni-helper/uni-types";
108
+ InputOnBlurEvent,
109
+ InputOnConfirmEvent,
110
+ InputOnFocusEvent,
111
+ InputOnInputEvent
112
+ } from '@uni-helper/uni-types'
113
+ import searchProps from './props'
118
114
  // 组件
119
- import HyIcon from "../hy-icon/hy-icon.vue";
115
+ import HyIcon from '../hy-icon/hy-icon.vue'
120
116
 
121
117
  /**
122
118
  * 搜索组件,集成了常见搜索框所需功能,用户可以一键引入,开箱即用。
123
119
  * @displayName hy-search
124
120
  */
125
- defineOptions({});
121
+ defineOptions({})
126
122
 
127
- // const props = withDefaults(defineProps<IProps>(), defaultProps)
128
- const props = defineProps({
129
- /** 输入框初始值 */
130
- modelValue: {
131
- type: String,
132
- default: "",
133
- },
134
- /**
135
- * 搜索框形状
136
- * @values circle,square
137
- * */
138
- shape: {
139
- type: String,
140
- default: "circle",
141
- },
142
- /** 搜索框背景颜色 */
143
- bgColor: String,
144
- /** 占位文字内容 */
145
- placeholder: {
146
- type: String,
147
- default: "请输入关键字",
148
- },
149
- /**
150
- * 设置右下角按钮的文字,兼容性详见uni-app文档
151
- * @valuse send,search,next,go,done
152
- * */
153
- confirmType: {
154
- type: String as PropType<InputConfirmType>,
155
- default: "search",
156
- },
157
- /** 是否启用清除控件 */
158
- clearable: {
159
- type: Boolean,
160
- default: true,
161
- },
162
- /** 是否自动获得焦点 */
163
- autoFocus: {
164
- type: Boolean,
165
- default: false,
166
- },
167
- /** 键盘收起时,是否自动失去焦点 */
168
- autoBlur: {
169
- type: Boolean,
170
- default: true,
171
- },
172
- /** 键盘弹起时,是否自动上推页面 */
173
- adjustPosition: {
174
- type: Boolean,
175
- default: true,
176
- },
177
- /** 是否显示右侧控件 */
178
- showAction: {
179
- type: Boolean,
180
- default: true,
181
- },
182
- /** 右侧控件文字 */
183
- actionText: {
184
- type: String,
185
- default: "搜索",
186
- },
187
- /** 右侧控件的样式,对象形式 */
188
- actionStyle: {
189
- type: Object as PropType<CSSProperties>,
190
- default: {},
191
- },
192
- /** 输入框内容水平对齐方式 */
193
- inputAlign: {
194
- type: String,
195
- default: "left",
196
- },
197
- /** 自定义输入框样式,对象形式 */
198
- inputStyle: {
199
- type: Object as PropType<CSSProperties>,
200
- default: {},
201
- },
202
- /** 是否启用输入框 */
203
- disabled: {
204
- type: Boolean,
205
- default: false,
206
- },
207
- /** 边框颜色,配置了颜色,才会有边框 */
208
- borderColor: {
209
- type: String,
210
- default: "transparent",
211
- },
212
- /** 输入框字体颜色 */
213
- color: String,
214
- /** placeholder的颜色 */
215
- placeholderColor: {
216
- type: String,
217
- default: "",
218
- },
219
- /** 输入框左边的图标属性集合,可以为图标名称或图片路径 */
220
- searchIcon: {
221
- type: [Boolean, Object] as PropType<HyIconProps | boolean>,
222
- default: { name: IconConfig.SEARCH },
223
- },
224
- /** 组件与其他上下左右之间的距离,带单位的字符串形式,如"30px" */
225
- margin: {
226
- type: [String, Number],
227
- default: 0,
228
- },
229
- /** 是否开启动画,见上方说明 */
230
- animation: {
231
- type: Boolean,
232
- default: false,
233
- },
234
- /** 输入框最大能输入的长度,-1为不限制长度 */
235
- maxlength: {
236
- type: Number,
237
- default: -1,
238
- },
239
- /** 输入框高度,单位px */
240
- height: {
241
- type: Number,
242
- default: 30,
243
- },
244
- /** 搜索框左边显示内容 */
245
- label: String,
246
- /** 定义需要用到的外部样式 */
247
- customStyle: {
248
- type: Object as PropType<CSSProperties>,
249
- },
250
- /** 自定义外部类名 */
251
- customClass: String,
252
- });
253
- const emit = defineEmits<ISearchEmits>();
123
+ const props = defineProps(searchProps)
124
+ const emit = defineEmits<ISearchEmits>()
254
125
 
255
- const keyword = ref<string>(props.modelValue);
126
+ const keyword = ref<string>(props.modelValue)
256
127
  // 显示右边搜索按钮
257
- const show = ref<boolean>(false);
128
+ const show = ref<boolean>(false)
258
129
  // 标记input当前状态是否处于聚焦中,如果是,才会显示右侧的清除控件
259
- const focused = ref(false);
130
+ const focused = ref(false)
260
131
 
261
132
  watch(
262
- () => keyword.value,
263
- (newValue: string) => {
264
- emit("update:modelValue", newValue);
265
- emit("change", newValue);
266
- },
267
- );
133
+ () => keyword.value,
134
+ (newValue: string) => {
135
+ emit('update:modelValue', newValue)
136
+ emit('change', newValue)
137
+ }
138
+ )
268
139
 
269
140
  // 是否显示右边控件
270
141
  const showActionBtn = computed<boolean>(() => {
271
- return !props.animation && props.showAction;
272
- });
142
+ return !props.animation && props.showAction
143
+ })
273
144
  // 是否显示清除控件
274
145
  const showClear = computed(() => {
275
- const { clearable, disabled } = props;
276
- return clearable && !disabled && !!focused.value && keyword.value !== "";
277
- });
146
+ const { clearable, disabled } = props
147
+ return clearable && !disabled && !!focused.value && keyword.value !== ''
148
+ })
278
149
 
279
150
  /**
280
151
  * 值改变触发
281
152
  * */
282
153
  const inputChange = (e: InputOnInputEvent) => {
283
- keyword.value = e.detail.value;
284
- };
154
+ keyword.value = e.detail.value
155
+ }
285
156
  /**
286
157
  * @description 清空输入
287
158
  * */
288
159
  const onClear = () => {
289
- keyword.value = "";
290
- // 延后发出事件,避免在父组件监听clear事件时,value为更新前的值(不为空)
291
- nextTick(() => {
292
- emit("clear");
293
- });
294
- };
160
+ keyword.value = ''
161
+ // 延后发出事件,避免在父组件监听clear事件时,value为更新前的值(不为空)
162
+ nextTick(() => {
163
+ emit('clear')
164
+ })
165
+ }
295
166
  /**
296
167
  * @description 确定搜索
297
168
  * */
298
169
  const onSearch = (e: InputOnConfirmEvent) => {
299
- emit("search", e, e.detail.value);
300
- try {
301
- // 收起键盘
302
- uni.hideKeyboard();
303
- } catch (e) {}
304
- };
170
+ emit('search', e, e.detail.value)
171
+ try {
172
+ // 收起键盘
173
+ uni.hideKeyboard()
174
+ } catch (e) {}
175
+ }
305
176
  /**
306
177
  * @description 点击右边自定义按钮的事件
307
178
  */
308
179
  const onConfirm = () => {
309
- emit("confirm", keyword.value);
310
- try {
311
- // 收起键盘
312
- uni.hideKeyboard();
313
- } catch (e) {}
314
- };
180
+ emit('confirm', keyword.value)
181
+ try {
182
+ // 收起键盘
183
+ uni.hideKeyboard()
184
+ } catch (e) {}
185
+ }
315
186
  /**
316
187
  * @description 获取焦点
317
188
  * */
318
189
  const onFocus = (e: InputOnFocusEvent) => {
319
- focused.value = true;
320
- // 开启右侧搜索按钮展开的动画效果
321
- if (props.animation && props.showAction) show.value = true;
322
- emit("focus", e, keyword.value);
323
- };
190
+ focused.value = true
191
+ // 开启右侧搜索按钮展开的动画效果
192
+ if (props.animation && props.showAction) show.value = true
193
+ emit('focus', e, keyword.value)
194
+ }
324
195
 
325
196
  // 失去焦点
326
197
  const onBlur = (e: InputOnBlurEvent) => {
327
- show.value = false;
328
- emit("blur", e, keyword.value);
329
- };
198
+ show.value = false
199
+ emit('blur', e, keyword.value)
200
+ }
330
201
  /**
331
202
  * @description 点击搜索框,只有disabled=true时才发出事件,因为禁止了输入,意味着是想跳转真正的搜索页
332
203
  * */
333
204
  const clickHandler = () => {
334
- if (props.disabled) emit("click");
335
- };
205
+ if (props.disabled) emit('click')
206
+ }
336
207
  /**
337
208
  * @description 点击左边图标
338
209
  * */
339
210
  const clickIcon = () => {
340
- emit("clickIcon", keyword.value);
341
- try {
342
- // 收起键盘
343
- uni.hideKeyboard();
344
- } catch (e) {}
345
- };
211
+ emit('clickIcon', keyword.value)
212
+ try {
213
+ // 收起键盘
214
+ uni.hideKeyboard()
215
+ } catch (e) {}
216
+ }
346
217
  </script>
347
218
 
348
219
  <style lang="scss" scoped>
349
- @import "./index.scss";
220
+ @import './index.scss';
350
221
  </style>
@@ -1,27 +1,132 @@
1
- import type IProps from "./typing";
1
+ import type { CSSProperties, PropType } from 'vue'
2
+ import type { InputConfirmType } from '@uni-helper/uni-types'
3
+ import { IconConfig } from '../../libs'
4
+ import type HyIconProps from '../hy-icon/typing'
2
5
 
3
- const defaultProps: IProps = {
4
- modelValue: "",
5
- shape: "circle",
6
- bgColor: "",
7
- placeholder: "请输入关键字",
8
- clear: true,
9
- focus: false,
10
- showAction: true,
11
- actionText: "搜索",
12
- inputAlign: "left",
13
- disabled: false,
14
- borderColor: "transparent",
15
- color: "",
16
- placeholderColor: "#909399",
17
- searchIcon: {},
18
- margin: "0",
19
- animation: false,
20
- maxlength: "-1",
21
- height: 32,
22
- label: null,
23
- adjustPosition: true,
24
- autoBlur: true,
25
- };
6
+ const searchProps = {
7
+ /** 输入框初始值 */
8
+ modelValue: {
9
+ type: String,
10
+ default: ''
11
+ },
12
+ /**
13
+ * 搜索框形状
14
+ * @values circle,square
15
+ * */
16
+ shape: {
17
+ type: String,
18
+ default: 'circle'
19
+ },
20
+ /** 搜索框背景颜色 */
21
+ bgColor: String,
22
+ /** 占位文字内容 */
23
+ placeholder: {
24
+ type: String,
25
+ default: '请输入关键字'
26
+ },
27
+ /**
28
+ * 设置右下角按钮的文字,兼容性详见uni-app文档
29
+ * @valuse send,search,next,go,done
30
+ * */
31
+ confirmType: {
32
+ type: String as PropType<InputConfirmType>,
33
+ default: 'search'
34
+ },
35
+ /** 是否启用清除控件 */
36
+ clearable: {
37
+ type: Boolean,
38
+ default: true
39
+ },
40
+ /** 是否自动获得焦点 */
41
+ autoFocus: {
42
+ type: Boolean,
43
+ default: false
44
+ },
45
+ /** 键盘收起时,是否自动失去焦点 */
46
+ autoBlur: {
47
+ type: Boolean,
48
+ default: true
49
+ },
50
+ /** 键盘弹起时,是否自动上推页面 */
51
+ adjustPosition: {
52
+ type: Boolean,
53
+ default: true
54
+ },
55
+ /** 是否显示右侧控件 */
56
+ showAction: {
57
+ type: Boolean,
58
+ default: true
59
+ },
60
+ /** 右侧控件文字 */
61
+ actionText: {
62
+ type: String,
63
+ default: '搜索'
64
+ },
65
+ /** 右侧控件的样式,对象形式 */
66
+ actionStyle: {
67
+ type: Object as PropType<CSSProperties>,
68
+ default: {}
69
+ },
70
+ /** 输入框内容水平对齐方式 */
71
+ inputAlign: {
72
+ type: String,
73
+ default: 'left'
74
+ },
75
+ /** 自定义输入框样式,对象形式 */
76
+ inputStyle: {
77
+ type: Object as PropType<CSSProperties>,
78
+ default: {}
79
+ },
80
+ /** 是否启用输入框 */
81
+ disabled: {
82
+ type: Boolean,
83
+ default: false
84
+ },
85
+ /** 边框颜色,配置了颜色,才会有边框 */
86
+ borderColor: {
87
+ type: String,
88
+ default: 'transparent'
89
+ },
90
+ /** 输入框字体颜色 */
91
+ color: String,
92
+ /** placeholder的颜色 */
93
+ placeholderColor: {
94
+ type: String,
95
+ default: ''
96
+ },
97
+ /** 输入框左边的图标属性集合,可以为图标名称或图片路径 */
98
+ searchIcon: {
99
+ type: [Boolean, Object] as PropType<HyIconProps | boolean>,
100
+ default: { name: IconConfig.SEARCH }
101
+ },
102
+ /** 组件与其他上下左右之间的距离,带单位的字符串形式,如"30px" */
103
+ margin: {
104
+ type: [String, Number],
105
+ default: 0
106
+ },
107
+ /** 是否开启动画,见上方说明 */
108
+ animation: {
109
+ type: Boolean,
110
+ default: false
111
+ },
112
+ /** 输入框最大能输入的长度,-1为不限制长度 */
113
+ maxlength: {
114
+ type: Number,
115
+ default: -1
116
+ },
117
+ /** 输入框高度,单位px */
118
+ height: {
119
+ type: Number,
120
+ default: 30
121
+ },
122
+ /** 搜索框左边显示内容 */
123
+ label: String,
124
+ /** 定义需要用到的外部样式 */
125
+ customStyle: {
126
+ type: Object as PropType<CSSProperties>
127
+ },
128
+ /** 自定义外部类名 */
129
+ customClass: String
130
+ }
26
131
 
27
- export default defaultProps;
132
+ export default searchProps