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,13 +1,51 @@
1
- import type IProps from './typing'
1
+ import type { IOffset, IPlacementVo } from './typing'
2
+ import type { CSSProperties, PropType } from 'vue'
2
3
 
3
- const defaultProps: IProps = {
4
- modelValue: false,
5
- content: '',
6
- placement: 'bottom',
7
- offset: 0,
8
- showClose: false,
9
- disabled: false,
10
- mode: 'normal',
4
+ const popoverProps = {
5
+ /** 控制 popover 的显示状态 */
6
+ modelValue: {
7
+ type: Boolean,
8
+ default: false
9
+ },
10
+ /** 显示的内容,也可以通过 slot#content 传入 */
11
+ content: {
12
+ type: [String, Array] as PropType<string | any[]>
13
+ },
14
+ /**
15
+ * 指定 popover 的放置位置
16
+ * @values top,top-start,top-end,bottom,bottom-start,bottom-end,left,left-start,left-end,right,right-start,right-end
17
+ * */
18
+ placement: {
19
+ type: String as PropType<IPlacementVo>,
20
+ default: 'bottom'
21
+ },
22
+ /** 控制 popover 的显示状态 */
23
+ offset: {
24
+ type: [Number, Array, Object] as PropType<IOffset>,
25
+ default: 0
26
+ },
27
+ /** 是否显示关闭按钮 */
28
+ showClose: {
29
+ type: Boolean,
30
+ default: false
31
+ },
32
+ /** 是否禁用 popover */
33
+ disabled: {
34
+ type: Boolean,
35
+ default: false
36
+ },
37
+ /**
38
+ * 当前显示的模式,决定内容的展现形式
39
+ * @values normal,menu
40
+ * */
41
+ mode: {
42
+ type: String,
43
+ default: 'normal'
44
+ },
45
+ /** 定义需要用到的外部样式 */
46
+ customStyle: Object as PropType<CSSProperties>,
47
+ /** 自定义外部类名 */
48
+ customClass: String
11
49
  }
12
50
 
13
- export default defaultProps
51
+ export default popoverProps
@@ -1,284 +1,198 @@
1
1
  <template>
2
- <view :class="['hy-popup', customClass]">
3
- <HyOverlay
4
- :show="show"
5
- @click="overlayClick"
6
- v-if="overlay"
7
- :zIndex="zIndex"
8
- :duration="overlayDuration"
9
- :customStyle="overlayStyle"
10
- :opacity="overlayOpacity"
11
- ></HyOverlay>
12
- <HyTransition
13
- :show="show"
14
- :customStyle="transitionStyle"
15
- :mode="positionMode"
16
- :duration="duration"
17
- @afterEnter="afterEnter"
18
- @click="clickHandler"
19
- >
20
- <!-- @click.stop不能去除,去除会导致居中模式下点击内容区域触发关闭弹窗 -->
21
- <view class="hy-popup__content" :style="[contentStyle]">
22
- <!-- <u-status-bar v-if="safeAreaInsetTop"></u-status-bar>-->
23
- <slot></slot>
24
- <view
25
- v-if="closeable"
26
- @tap.stop="close"
27
- :class="[
28
- 'hy-popup__content__close',
29
- 'hy-popup__content__close--' + closeIconPos,
30
- ]"
31
- hover-class="hy-popup__content__close--hover"
32
- hover-stay-time="150"
2
+ <view :class="['hy-popup', customClass]">
3
+ <hy-overlay
4
+ :show="show"
5
+ @click="overlayClick"
6
+ v-if="overlay"
7
+ :zIndex="zIndex"
8
+ :duration="overlayDuration"
9
+ :customStyle="overlayStyle"
10
+ :opacity="overlayOpacity"
11
+ ></hy-overlay>
12
+ <hy-transition
13
+ :show="show"
14
+ :customStyle="transitionStyle"
15
+ :mode="positionMode"
16
+ :duration="duration"
17
+ @afterEnter="afterEnter"
18
+ @click="clickHandler"
33
19
  >
34
- <HyIcon
35
- :name="IconConfig.CLOSE"
36
- color="#909399"
37
- size="18"
38
- bold
39
- ></HyIcon>
40
- </view>
41
- <!-- <hy-safe-bottom v-if="safeAreaInsetBottom"></hy-safe-bottom>-->
42
- </view>
43
- </HyTransition>
44
- </view>
20
+ <!-- @click.stop不能去除,去除会导致居中模式下点击内容区域触发关闭弹窗 -->
21
+ <view class="hy-popup__content" :style="[contentStyle]">
22
+ <!-- <u-status-bar v-if="safeAreaInsetTop"></u-status-bar>-->
23
+ <slot></slot>
24
+ <view
25
+ v-if="closeable"
26
+ @tap.stop="close"
27
+ :class="[
28
+ 'hy-popup__content__close',
29
+ 'hy-popup__content__close--' + closeIconPos
30
+ ]"
31
+ hover-class="hy-popup__content__close--hover"
32
+ hover-stay-time="150"
33
+ >
34
+ <hy-icon :name="IconConfig.CLOSE" color="#909399" size="18" bold></hy-icon>
35
+ </view>
36
+ <!-- <hy-safe-bottom v-if="safeAreaInsetBottom"></hy-safe-bottom>-->
37
+ </view>
38
+ </hy-transition>
39
+ </view>
45
40
  </template>
46
41
 
47
42
  <script lang="ts">
48
43
  export default {
49
- name: "hy-popup",
50
- options: {
51
- addGlobalClass: true,
52
- virtualHost: true,
53
- styleIsolation: "shared",
54
- },
55
- };
44
+ name: 'hy-popup',
45
+ options: {
46
+ addGlobalClass: true,
47
+ virtualHost: true,
48
+ styleIsolation: 'shared'
49
+ }
50
+ }
56
51
  </script>
57
52
 
58
53
  <script setup lang="ts">
59
- import { computed, ref, watch } from "vue";
60
- import type { CSSProperties, PropType } from "vue";
61
- import type { IPopupEmits } from "./typing";
62
- import { addUnit, getWindowInfo, IconConfig } from "../../libs";
63
-
54
+ import { computed, ref, watch } from 'vue'
55
+ import type { CSSProperties } from 'vue'
56
+ import type { IPopupEmits } from './typing'
57
+ import { addUnit, getWindowInfo, IconConfig } from '../../libs'
58
+ import popupProps from './props'
64
59
  // 组件
65
- import HyTransition from "../hy-transition/hy-transition.vue";
66
- import HyOverlay from "../hy-overlay/hy-overlay.vue";
67
- import HyIcon from "../hy-icon/hy-icon.vue";
60
+ import HyTransition from '../hy-transition/hy-transition.vue'
61
+ import HyOverlay from '../hy-overlay/hy-overlay.vue'
62
+ import HyIcon from '../hy-icon/hy-icon.vue'
68
63
 
69
64
  /**
70
65
  * 弹出层容器,用于展示弹窗、信息提示等内容,支持上、下、左、右和中部弹出。组件只提供容器,内部内容由用户自定义。
71
66
  * @displayName hy-popup
72
67
  */
73
- defineOptions({});
68
+ defineOptions({})
74
69
 
75
- // const props = withDefaults(defineProps<IProps>(), defaultProps)
76
- const props = defineProps({
77
- /** 是否展示弹窗 */
78
- show: {
79
- type: Boolean,
80
- default: false,
81
- },
82
- /** 是否显示遮罩 */
83
- overlay: {
84
- type: Boolean,
85
- default: true,
86
- },
87
- /**
88
- * 弹出方向
89
- * @values left,right,top,bottom,center
90
- * */
91
- mode: {
92
- type: String as PropType<HyApp.LayoutType>,
93
- default: "bottom",
94
- },
95
- /** 动画时长,单位ms */
96
- duration: {
97
- type: Number,
98
- default: 300,
99
- },
100
- /** 是否显示关闭图标 */
101
- closeable: {
102
- type: Boolean,
103
- default: false,
104
- },
105
- /** 自定义遮罩的样式 */
106
- overlayStyle: Object as PropType<CSSProperties>,
107
- /** 遮罩透明度,0-1之间 */
108
- overlayOpacity: {
109
- type: Number,
110
- default: 0.5,
111
- },
112
- /** 点击遮罩是否关闭弹窗 */
113
- closeOnClickOverlay: {
114
- type: Boolean,
115
- default: true,
116
- },
117
- /** 弹窗层级 */
118
- zIndex: {
119
- type: Number,
120
- default: 10086,
121
- },
122
- /** 是否为iPhoneX留出底部安全距离 */
123
- safeAreaInsetBottom: {
124
- type: Boolean,
125
- default: true,
126
- },
127
- /** 是否留出顶部安全距离 */
128
- safeAreaInsetTop: {
129
- type: Boolean,
130
- default: false,
131
- },
132
- /**
133
- * 自定义关闭图标位置
134
- * @values top-left,top-right
135
- * */
136
- closeIconPos: {
137
- type: String,
138
- default: "top-right",
139
- },
140
- /** 圆角值 */
141
- round: [String, Number],
142
- /** 当mode=center时 是否开启缩放 */
143
- zoom: {
144
- type: Boolean,
145
- default: true,
146
- },
147
- /** 背景颜色 */
148
- bgColor: String,
149
- /** 定义需要用到的外部样式 */
150
- customStyle: {
151
- type: Object as PropType<CSSProperties>,
152
- default: () => {},
153
- },
154
- /** 自定义外部类名 */
155
- customClass: String,
156
- });
157
- const emit = defineEmits<IPopupEmits>();
70
+ const props = defineProps(popupProps)
71
+ const emit = defineEmits<IPopupEmits>()
158
72
 
159
- const overlayDuration = ref(props.duration + 50);
73
+ const overlayDuration = ref(props.duration + 50)
160
74
 
161
75
  watch(
162
- () => props.show,
163
- (newValue) => {
164
- if (newValue) {
165
- // #ifdef MP-WEIXIN
166
- // const children = this.$children
167
- // retryComputedComponentRect(children)
168
- // #endif
76
+ () => props.show,
77
+ (newValue) => {
78
+ if (newValue) {
79
+ // #ifdef MP-WEIXIN
80
+ // const children = this.$children
81
+ // retryComputedComponentRect(children)
82
+ // #endif
83
+ }
169
84
  }
170
- },
171
- );
85
+ )
172
86
 
173
87
  const transitionStyle = computed(() => {
174
- const style: CSSProperties = {
175
- zIndex: props.zIndex,
176
- position: "fixed",
177
- display: "flex",
178
- };
179
- if (props.mode !== "center") {
180
- style[props.mode] = 0;
181
- }
182
- switch (props.mode) {
183
- case "left":
184
- case "right":
185
- style.bottom = 0;
186
- style.top = 0;
187
- break;
188
- case "top":
189
- case "bottom":
190
- style.left = 0;
191
- style.right = 0;
192
- break;
193
- case "center":
194
- Object.assign(style, {
195
- alignItems: "center",
196
- "justify-content": "center",
197
- top: 0,
198
- left: 0,
199
- right: 0,
200
- bottom: 0,
201
- });
202
- break;
203
- default:
204
- break;
205
- }
88
+ const style: CSSProperties = {
89
+ zIndex: props.zIndex,
90
+ position: 'fixed',
91
+ display: 'flex'
92
+ }
93
+ if (props.mode !== 'center') {
94
+ style[props.mode] = 0
95
+ }
96
+ switch (props.mode) {
97
+ case 'left':
98
+ case 'right':
99
+ style.bottom = 0
100
+ style.top = 0
101
+ break
102
+ case 'top':
103
+ case 'bottom':
104
+ style.left = 0
105
+ style.right = 0
106
+ break
107
+ case 'center':
108
+ Object.assign(style, {
109
+ alignItems: 'center',
110
+ 'justify-content': 'center',
111
+ top: 0,
112
+ left: 0,
113
+ right: 0,
114
+ bottom: 0
115
+ })
116
+ break
117
+ default:
118
+ break
119
+ }
206
120
 
207
- return style;
208
- });
121
+ return style
122
+ })
209
123
  const contentStyle = computed(() => {
210
- const style: CSSProperties = {};
211
- // 通过设备信息的safeAreaInsets值来判断是否需要预留顶部状态栏和底部安全局的位置
212
- // 不使用css方案,是因为nvue不支持css的iPhoneX安全区查询属性
213
- const { safeAreaInsets } = getWindowInfo();
214
- if (props.mode !== "center") {
215
- style.flex = 1;
216
- }
217
- // 背景色,一般用于设置为transparent,去除默认的白色背景
218
- if (props.bgColor) {
219
- style.backgroundColor = props.bgColor;
220
- }
221
- if (props.round) {
222
- const value = addUnit(props.round);
223
- switch (props.mode) {
224
- case "top":
225
- style.borderBottomLeftRadius = value;
226
- style.borderBottomRightRadius = value;
227
- break;
228
- case "bottom":
229
- style.borderTopLeftRadius = value;
230
- style.borderTopRightRadius = value;
231
- break;
232
- case "center":
233
- style.borderRadius = value;
234
- break;
235
- default:
236
- break;
124
+ const style: CSSProperties = {}
125
+ // 通过设备信息的safeAreaInsets值来判断是否需要预留顶部状态栏和底部安全局的位置
126
+ // 不使用css方案,是因为nvue不支持css的iPhoneX安全区查询属性
127
+ const { safeAreaInsets } = getWindowInfo()
128
+ if (props.mode !== 'center') {
129
+ style.flex = 1
130
+ }
131
+ // 背景色,一般用于设置为transparent,去除默认的白色背景
132
+ if (props.bgColor) {
133
+ style.backgroundColor = props.bgColor
237
134
  }
238
- }
239
- return Object.assign(style, props.customStyle);
240
- });
135
+ if (props.round) {
136
+ const value = addUnit(props.round)
137
+ switch (props.mode) {
138
+ case 'top':
139
+ style.borderBottomLeftRadius = value
140
+ style.borderBottomRightRadius = value
141
+ break
142
+ case 'bottom':
143
+ style.borderTopLeftRadius = value
144
+ style.borderTopRightRadius = value
145
+ break
146
+ case 'center':
147
+ style.borderRadius = value
148
+ break
149
+ default:
150
+ break
151
+ }
152
+ }
153
+ return Object.assign(style, props.customStyle)
154
+ })
241
155
  const positionMode = computed(() => {
242
- if (props.mode === "center") {
243
- return props.zoom ? "fade-zoom" : "fade";
244
- }
245
- if (props.mode === "left") {
246
- return "slide-left";
247
- }
248
- if (props.mode === "right") {
249
- return "slide-right";
250
- }
251
- if (props.mode === "bottom") {
252
- return "slide-up";
253
- }
254
- if (props.mode === "top") {
255
- return "slide-down";
256
- }
257
- });
156
+ if (props.mode === 'center') {
157
+ return props.zoom ? 'fade-zoom' : 'fade'
158
+ }
159
+ if (props.mode === 'left') {
160
+ return 'slide-left'
161
+ }
162
+ if (props.mode === 'right') {
163
+ return 'slide-right'
164
+ }
165
+ if (props.mode === 'bottom') {
166
+ return 'slide-up'
167
+ }
168
+ if (props.mode === 'top') {
169
+ return 'slide-down'
170
+ }
171
+ })
258
172
 
259
173
  // 点击遮罩
260
174
  const overlayClick = () => {
261
- if (props.closeOnClickOverlay) {
262
- emit("update:show", false);
263
- emit("close");
264
- }
265
- };
175
+ if (props.closeOnClickOverlay) {
176
+ emit('update:show', false)
177
+ emit('close')
178
+ }
179
+ }
266
180
  const close = () => {
267
- emit("update:show", false);
268
- emit("close");
269
- };
181
+ emit('update:show', false)
182
+ emit('close')
183
+ }
270
184
  const afterEnter = () => {
271
- emit("open");
272
- };
185
+ emit('open')
186
+ }
273
187
  const clickHandler = () => {
274
- // 由于中部弹出时,其u-transition占据了整个页面相当于遮罩,此时需要发出遮罩点击事件,是否无法通过点击遮罩关闭弹窗
275
- if (props.mode === "center") {
276
- overlayClick();
277
- }
278
- emit("click");
279
- };
188
+ // 由于中部弹出时,其u-transition占据了整个页面相当于遮罩,此时需要发出遮罩点击事件,是否无法通过点击遮罩关闭弹窗
189
+ if (props.mode === 'center') {
190
+ overlayClick()
191
+ }
192
+ emit('click')
193
+ }
280
194
  </script>
281
195
 
282
196
  <style lang="scss" scoped>
283
- @import "./index.scss";
197
+ @import './index.scss';
284
198
  </style>
@@ -1,21 +1,85 @@
1
- import type IProps from './typing'
1
+ import type { CSSProperties, PropType } from 'vue'
2
2
 
3
- const defaultProps: IProps = {
4
- show: false,
5
- overlay: true,
6
- mode: 'bottom',
7
- duration: 300,
8
- closeable: false,
9
- overlayStyle: {},
10
- overlayOpacity: 0.5,
11
- closeOnClickOverlay: true,
12
- zIndex: 10075,
13
- safeAreaInsetBottom: true,
14
- safeAreaInsetTop: false,
15
- closeIconPos: 'top-right',
16
- round: '',
17
- zoom: true,
18
- bgColor: '',
3
+ const popupProps = {
4
+ /** 是否展示弹窗 */
5
+ show: {
6
+ type: Boolean,
7
+ default: false
8
+ },
9
+ /** 是否显示遮罩 */
10
+ overlay: {
11
+ type: Boolean,
12
+ default: true
13
+ },
14
+ /**
15
+ * 弹出方向
16
+ * @values left,right,top,bottom,center
17
+ * */
18
+ mode: {
19
+ type: String as PropType<HyApp.LayoutType>,
20
+ default: 'bottom'
21
+ },
22
+ /** 动画时长,单位ms */
23
+ duration: {
24
+ type: Number,
25
+ default: 300
26
+ },
27
+ /** 是否显示关闭图标 */
28
+ closeable: {
29
+ type: Boolean,
30
+ default: false
31
+ },
32
+ /** 自定义遮罩的样式 */
33
+ overlayStyle: Object as PropType<CSSProperties>,
34
+ /** 遮罩透明度,0-1之间 */
35
+ overlayOpacity: {
36
+ type: Number,
37
+ default: 0.5
38
+ },
39
+ /** 点击遮罩是否关闭弹窗 */
40
+ closeOnClickOverlay: {
41
+ type: Boolean,
42
+ default: true
43
+ },
44
+ /** 弹窗层级 */
45
+ zIndex: {
46
+ type: Number,
47
+ default: 10086
48
+ },
49
+ /** 是否为iPhoneX留出底部安全距离 */
50
+ safeAreaInsetBottom: {
51
+ type: Boolean,
52
+ default: true
53
+ },
54
+ /** 是否留出顶部安全距离 */
55
+ safeAreaInsetTop: {
56
+ type: Boolean,
57
+ default: false
58
+ },
59
+ /**
60
+ * 自定义关闭图标位置
61
+ * @values top-left,top-right
62
+ * */
63
+ closeIconPos: {
64
+ type: String,
65
+ default: 'top-right'
66
+ },
67
+ /** 圆角值 */
68
+ round: [String, Number],
69
+ /** 当mode=center时 是否开启缩放 */
70
+ zoom: {
71
+ type: Boolean,
72
+ default: true
73
+ },
74
+ /** 背景颜色 */
75
+ bgColor: String,
76
+ /** 定义需要用到的外部样式 */
77
+ customStyle: {
78
+ type: Object as PropType<CSSProperties>,
79
+ default: () => {}
80
+ },
81
+ /** 自定义外部类名 */
82
+ customClass: String
19
83
  }
20
84
 
21
- export default defaultProps
85
+ export default popupProps