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,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