hy-app 0.5.10 → 0.5.12

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 (293) hide show
  1. package/components/hy-action-sheet/hy-action-sheet.vue +200 -200
  2. package/components/hy-action-sheet/props.ts +71 -71
  3. package/components/hy-action-sheet/typing.d.ts +64 -64
  4. package/components/hy-address-picker/hy-address-picker.vue +1 -1
  5. package/components/hy-address-picker/props.ts +100 -100
  6. package/components/hy-address-picker/typing.d.ts +16 -16
  7. package/components/hy-avatar/hy-avatar.vue +163 -163
  8. package/components/hy-avatar/props.ts +78 -78
  9. package/components/hy-avatar/typing.d.ts +4 -4
  10. package/components/hy-back-top/hy-back-top.vue +90 -90
  11. package/components/hy-back-top/props.ts +60 -60
  12. package/components/hy-back-top/typing.d.ts +4 -4
  13. package/components/hy-badge/hy-badge.vue +97 -97
  14. package/components/hy-badge/props.ts +82 -82
  15. package/components/hy-badge/typing.d.ts +9 -9
  16. package/components/hy-button/hy-button.vue +17 -3
  17. package/components/hy-button/index.scss +24 -1
  18. package/components/hy-button/props.ts +9 -1
  19. package/components/hy-button/typing.d.ts +5 -0
  20. package/components/hy-calendar/header.vue +60 -60
  21. package/components/hy-calendar/hy-calendar.vue +362 -362
  22. package/components/hy-calendar/month.vue +537 -537
  23. package/components/hy-calendar/props.ts +159 -159
  24. package/components/hy-calendar/typing.d.ts +6 -6
  25. package/components/hy-card/hy-card.vue +161 -161
  26. package/components/hy-card/props.ts +122 -122
  27. package/components/hy-card/typing.d.ts +12 -12
  28. package/components/hy-cell/hy-cell.vue +33 -33
  29. package/components/hy-cell/props.ts +54 -54
  30. package/components/hy-cell/typing.d.ts +4 -4
  31. package/components/hy-cell-item/hy-cell-item.vue +161 -161
  32. package/components/hy-cell-item/props.ts +66 -66
  33. package/components/hy-cell-item/typing.d.ts +7 -7
  34. package/components/hy-check-button/hy-check-button.vue +96 -96
  35. package/components/hy-check-button/props.ts +74 -74
  36. package/components/hy-check-button/typing.d.ts +44 -44
  37. package/components/hy-checkbox/hy-checkbox.vue +227 -227
  38. package/components/hy-checkbox/props.ts +96 -96
  39. package/components/hy-checkbox/typing.d.ts +8 -8
  40. package/components/hy-checkbox-group/hy-checkbox-group.vue +45 -45
  41. package/components/hy-checkbox-group/props.ts +80 -80
  42. package/components/hy-checkbox-group/typing.d.ts +6 -6
  43. package/components/hy-checkbox-item/hy-checkbox-item.vue +199 -199
  44. package/components/hy-checkbox-item/props.ts +24 -24
  45. package/components/hy-checkbox-item/typing.d.ts +7 -7
  46. package/components/hy-code-input/hy-code-input.vue +231 -231
  47. package/components/hy-code-input/props.ts +88 -88
  48. package/components/hy-code-input/typing.d.ts +8 -8
  49. package/components/hy-config-provider/hy-config-provider.vue +53 -53
  50. package/components/hy-config-provider/props.ts +28 -28
  51. package/components/hy-count-down/hy-count-down.vue +170 -170
  52. package/components/hy-count-down/index.ts +52 -52
  53. package/components/hy-count-down/props.ts +32 -32
  54. package/components/hy-count-down/typing.d.ts +14 -14
  55. package/components/hy-count-to/hy-count-to.vue +218 -218
  56. package/components/hy-count-to/props.ts +62 -62
  57. package/components/hy-count-to/typing.d.ts +4 -4
  58. package/components/hy-coupon/hy-coupon.vue +12 -1
  59. package/components/hy-coupon/index.scss +167 -171
  60. package/components/hy-coupon/props.ts +6 -1
  61. package/components/hy-coupon/typing.d.ts +14 -14
  62. package/components/hy-datetime-picker/hy-datetime-picker.vue +521 -521
  63. package/components/hy-datetime-picker/props.ts +142 -142
  64. package/components/hy-datetime-picker/typing.d.ts +20 -20
  65. package/components/hy-divider/hy-divider.vue +132 -132
  66. package/components/hy-divider/props.ts +80 -80
  67. package/components/hy-dropdown/hy-dropdown.vue +60 -60
  68. package/components/hy-dropdown/props.ts +40 -40
  69. package/components/hy-dropdown-item/hy-dropdown-item.vue +206 -206
  70. package/components/hy-dropdown-item/props.ts +21 -21
  71. package/components/hy-dropdown-item/typing.d.ts +17 -17
  72. package/components/hy-empty/hy-empty.vue +116 -116
  73. package/components/hy-empty/icon.ts +72 -72
  74. package/components/hy-empty/props.ts +60 -60
  75. package/components/hy-empty/typing.d.ts +38 -38
  76. package/components/hy-flex/hy-flex.vue +53 -53
  77. package/components/hy-flex/index.scss +8 -8
  78. package/components/hy-flex/props.ts +58 -58
  79. package/components/hy-flex/typing.d.ts +21 -21
  80. package/components/hy-float-button/hy-float-button.vue +378 -378
  81. package/components/hy-float-button/props.ts +111 -111
  82. package/components/hy-float-button/typing.d.ts +35 -35
  83. package/components/hy-folding-panel/hy-folding-panel.vue +109 -109
  84. package/components/hy-folding-panel/props.ts +42 -42
  85. package/components/hy-folding-panel/typing.d.ts +19 -19
  86. package/components/hy-folding-panel-item/hy-folding-panel-item.vue +183 -183
  87. package/components/hy-folding-panel-item/props.ts +81 -81
  88. package/components/hy-folding-panel-item/typing.d.ts +37 -37
  89. package/components/hy-form/props.ts +37 -37
  90. package/components/hy-form/typing.d.ts +41 -41
  91. package/components/hy-form-group/hy-form-group.vue +333 -333
  92. package/components/hy-form-group/props.ts +105 -105
  93. package/components/hy-form-item/hy-form-item.vue +176 -176
  94. package/components/hy-form-item/index.scss +0 -1
  95. package/components/hy-form-item/props.ts +25 -25
  96. package/components/hy-form-item/typing.d.ts +30 -30
  97. package/components/hy-grid/hy-grid.vue +109 -109
  98. package/components/hy-grid/props.ts +60 -60
  99. package/components/hy-grid/typing.d.ts +35 -35
  100. package/components/hy-icon/hy-icon.vue +112 -112
  101. package/components/hy-icon/index.scss +0 -3
  102. package/components/hy-icon/props.ts +79 -79
  103. package/components/hy-icon/typing.d.ts +9 -9
  104. package/components/hy-image/hy-image.vue +192 -192
  105. package/components/hy-image/props.ts +107 -107
  106. package/components/hy-image/typing.d.ts +10 -10
  107. package/components/hy-input/hy-input.vue +1 -1
  108. package/components/hy-input/index.scss +1 -2
  109. package/components/hy-input/props.ts +3 -3
  110. package/components/hy-input/typing.d.ts +31 -31
  111. package/components/hy-line/hy-line.vue +55 -55
  112. package/components/hy-line/props.ts +43 -43
  113. package/components/hy-line-progress/hy-line-progress.vue +102 -102
  114. package/components/hy-line-progress/props.ts +33 -33
  115. package/components/hy-list/hy-list.vue +226 -226
  116. package/components/hy-list/props.ts +69 -69
  117. package/components/hy-list/typing.d.ts +6 -6
  118. package/components/hy-loading/hy-loading.vue +107 -107
  119. package/components/hy-loading/props.ts +65 -65
  120. package/components/hy-menu/hy-menu.vue +159 -159
  121. package/components/hy-menu/props.ts +44 -44
  122. package/components/hy-menu/typing.d.ts +34 -34
  123. package/components/hy-modal/hy-modal.vue +173 -173
  124. package/components/hy-modal/props.ts +90 -90
  125. package/components/hy-modal/typing.d.ts +11 -11
  126. package/components/hy-navbar/hy-navbar.vue +144 -144
  127. package/components/hy-navbar/props.ts +78 -78
  128. package/components/hy-navbar/typing.d.ts +6 -6
  129. package/components/hy-notice-bar/hy-column-notice.vue +94 -94
  130. package/components/hy-notice-bar/hy-notice-bar.vue +96 -96
  131. package/components/hy-notice-bar/hy-row-notice.vue +1 -1
  132. package/components/hy-notice-bar/props.ts +85 -85
  133. package/components/hy-notice-bar/typing.d.ts +8 -8
  134. package/components/hy-notify/hy-notify.vue +174 -174
  135. package/components/hy-notify/props.ts +51 -51
  136. package/components/hy-number-step/hy-number-step.vue +367 -367
  137. package/components/hy-number-step/props.ts +112 -112
  138. package/components/hy-number-step/typing.d.ts +16 -16
  139. package/components/hy-overlay/hy-overlay.vue +60 -60
  140. package/components/hy-overlay/props.ts +33 -33
  141. package/components/hy-overlay/typing.d.ts +4 -4
  142. package/components/hy-pagination/hy-pagination.vue +135 -135
  143. package/components/hy-pagination/props.ts +55 -55
  144. package/components/hy-pagination/typing.d.ts +10 -10
  145. package/components/hy-parse/node/node.vue +619 -422
  146. package/components/hy-parse/parser.js +1253 -1060
  147. package/components/hy-picker/hy-picker.vue +7 -5
  148. package/components/hy-picker/props.ts +7 -2
  149. package/components/hy-picker/typing.d.ts +9 -5
  150. package/components/hy-popover/hy-popover.vue +251 -251
  151. package/components/hy-popover/props.ts +51 -51
  152. package/components/hy-popover/typing.d.ts +39 -39
  153. package/components/hy-popup/hy-popup.vue +197 -197
  154. package/components/hy-popup/props.ts +85 -85
  155. package/components/hy-popup/typing.d.ts +10 -10
  156. package/components/hy-price/hy-price.vue +79 -79
  157. package/components/hy-price/props.ts +54 -54
  158. package/components/hy-price/typing.d.ts +4 -4
  159. package/components/hy-qrcode/hy-qrcode.vue +216 -216
  160. package/components/hy-qrcode/props.ts +70 -70
  161. package/components/hy-qrcode/qrcode.js +1304 -1304
  162. package/components/hy-qrcode/typing.d.ts +8 -8
  163. package/components/hy-radio/hy-radio.vue +226 -226
  164. package/components/hy-radio/props.ts +1 -1
  165. package/components/hy-radio/typing.d.ts +8 -8
  166. package/components/hy-rate/hy-rate.vue +239 -239
  167. package/components/hy-rate/props.ts +77 -77
  168. package/components/hy-rate/typing.d.ts +6 -6
  169. package/components/hy-read-more/hy-read-more.vue +130 -130
  170. package/components/hy-read-more/props.ts +45 -45
  171. package/components/hy-read-more/typing.d.ts +6 -6
  172. package/components/hy-rolling-num/hy-rolling-num.vue +188 -188
  173. package/components/hy-rolling-num/props.ts +68 -68
  174. package/components/hy-scroll-list/hy-scroll-list.vue +123 -123
  175. package/components/hy-scroll-list/props.ts +22 -22
  176. package/components/hy-scroll-list/typing.d.ts +6 -6
  177. package/components/hy-search/hy-search.vue +221 -221
  178. package/components/hy-search/props.ts +131 -131
  179. package/components/hy-search/typing.d.ts +22 -22
  180. package/components/hy-signature/hy-signature.vue +640 -640
  181. package/components/hy-signature/props.ts +118 -118
  182. package/components/hy-signature/typing.d.ts +93 -93
  183. package/components/hy-slider/hy-slider.vue +444 -444
  184. package/components/hy-slider/props.ts +77 -77
  185. package/components/hy-slider/typing.d.ts +10 -10
  186. package/components/hy-status-bar/hy-status-bar.vue +41 -41
  187. package/components/hy-status-bar/props.ts +8 -8
  188. package/components/hy-status-bar/typing.d.ts +12 -12
  189. package/components/hy-steps/hy-steps.vue +267 -267
  190. package/components/hy-steps/props.ts +49 -49
  191. package/components/hy-steps/typing.d.ts +21 -21
  192. package/components/hy-sticky/hy-sticky.vue +226 -226
  193. package/components/hy-sticky/props.ts +24 -24
  194. package/components/hy-sticky/typing.d.ts +4 -4
  195. package/components/hy-submit-bar/hy-submit-bar.vue +189 -189
  196. package/components/hy-submit-bar/props.ts +91 -91
  197. package/components/hy-submit-bar/typing.d.ts +24 -24
  198. package/components/hy-subsection/hy-subsection.vue +207 -207
  199. package/components/hy-subsection/props.ts +52 -52
  200. package/components/hy-subsection/typing.d.ts +13 -13
  201. package/components/hy-swipe-action/hy-swipe-action.vue +323 -323
  202. package/components/hy-swipe-action/index.ts +25 -25
  203. package/components/hy-swipe-action/props.ts +47 -47
  204. package/components/hy-swipe-action/typing.d.ts +25 -25
  205. package/components/hy-swiper/hy-swiper-indicator.vue +75 -75
  206. package/components/hy-swiper/hy-swiper.vue +224 -224
  207. package/components/hy-swiper/props.ts +128 -128
  208. package/components/hy-swiper/typing.d.ts +26 -26
  209. package/components/hy-switch/hy-switch.vue +173 -173
  210. package/components/hy-switch/props.ts +61 -61
  211. package/components/hy-switch/typing.d.ts +8 -8
  212. package/components/hy-tabbar/hy-tabbar.vue +136 -136
  213. package/components/hy-tabbar/props.ts +59 -59
  214. package/components/hy-tabbar/typing.d.ts +21 -21
  215. package/components/hy-tabbar-group/hy-tabbar-group.vue +87 -87
  216. package/components/hy-tabbar-group/props.ts +78 -78
  217. package/components/hy-tabbar-group/typing.d.ts +16 -16
  218. package/components/hy-tabbar-item/hy-tabbar-item.vue +103 -103
  219. package/components/hy-tabbar-item/typing.d.ts +10 -10
  220. package/components/hy-table/hy-table.vue +492 -271
  221. package/components/hy-table/index.scss +134 -159
  222. package/components/hy-table/props.ts +22 -7
  223. package/components/hy-table/typing.d.ts +6 -11
  224. package/components/hy-tabs/hy-tabs.vue +1 -1
  225. package/components/hy-tabs/props.ts +77 -77
  226. package/components/hy-tabs/typing.d.ts +33 -33
  227. package/components/hy-tag/hy-tag.vue +174 -174
  228. package/components/hy-tag/props.ts +89 -89
  229. package/components/hy-tag/typing.d.ts +13 -13
  230. package/components/hy-text/hy-text.vue +3 -3
  231. package/components/hy-text/props.ts +1 -1
  232. package/components/hy-text/typing.d.ts +6 -6
  233. package/components/hy-textarea/hy-textarea.vue +3 -2
  234. package/components/hy-textarea/index.scss +2 -3
  235. package/components/hy-textarea/props.ts +116 -116
  236. package/components/hy-textarea/typing.d.ts +22 -22
  237. package/components/hy-toast/hy-toast.vue +1 -1
  238. package/components/hy-toast/typing.d.ts +38 -38
  239. package/components/hy-tooltip/hy-tooltip.vue +277 -277
  240. package/components/hy-tooltip/props.ts +78 -78
  241. package/components/hy-tooltip/typing.d.ts +4 -4
  242. package/components/hy-transition/hy-transition.vue +157 -157
  243. package/components/hy-transition/props.ts +32 -32
  244. package/components/hy-transition/typing.d.ts +16 -16
  245. package/components/hy-upload/hy-upload.vue +385 -385
  246. package/components/hy-upload/props.ts +132 -132
  247. package/components/hy-upload/typing.d.ts +65 -65
  248. package/components/hy-warn/hy-warn.vue +115 -115
  249. package/components/hy-warn/props.ts +49 -49
  250. package/components/hy-warn/typing.d.ts +6 -6
  251. package/components/hy-waterfall/hy-waterfall.vue +191 -191
  252. package/components/hy-waterfall/props.ts +21 -21
  253. package/components/hy-watermark/hy-watermark.vue +978 -978
  254. package/components/hy-watermark/props.ts +104 -104
  255. package/components/index.ts +183 -183
  256. package/global.d.ts +91 -91
  257. package/index.ts +1 -1
  258. package/libs/api/http.ts +140 -140
  259. package/libs/api/index.ts +1 -1
  260. package/libs/common/index.ts +2 -2
  261. package/libs/common/queue.ts +28 -28
  262. package/libs/composables/index.ts +6 -6
  263. package/libs/composables/usePopover.ts +241 -241
  264. package/libs/composables/useQueue.ts +53 -53
  265. package/libs/composables/useShakeService.ts +64 -64
  266. package/libs/composables/useShare.ts +42 -42
  267. package/libs/composables/useToast.ts +45 -45
  268. package/libs/composables/useTouch.ts +51 -51
  269. package/libs/config/color.ts +7 -7
  270. package/libs/config/icon.ts +430 -430
  271. package/libs/config/index.ts +2 -2
  272. package/libs/css/iconfont.css +443 -443
  273. package/libs/css/theme.scss +1 -0
  274. package/libs/css/vars.scss +2 -2
  275. package/libs/global/index.ts +6 -6
  276. package/libs/global/register-properties.ts +37 -37
  277. package/libs/index.ts +7 -7
  278. package/libs/typing/index.ts +4 -4
  279. package/libs/typing/modules/common.d.ts +136 -136
  280. package/libs/typing/modules/enum.ts +67 -67
  281. package/libs/typing/modules/form.ts +5 -1
  282. package/libs/typing/modules/http.ts +17 -17
  283. package/libs/typing/modules/icon.d.ts +366 -366
  284. package/libs/typing/modules/rect.ts +10 -10
  285. package/libs/utils/base64.ts +119 -119
  286. package/libs/utils/calendar.js +1021 -1021
  287. package/libs/utils/colorGradient.ts +112 -112
  288. package/libs/utils/index.ts +5 -5
  289. package/libs/utils/inside.ts +11 -25
  290. package/libs/utils/inspect.ts +171 -171
  291. package/libs/utils/utils.ts +521 -521
  292. package/package.json +18 -18
  293. package/web-types.json +1 -1
@@ -218,11 +218,13 @@ const inputLabelValue = computed((): string => {
218
218
  innerColumns.value.map((ite, i) => {
219
219
  res.push(
220
220
  ...innerColumns.value[i]?.filter((item) => {
221
- return isArray(props.modelValue) && props.modelValue.includes(item['id'])
221
+ return (
222
+ isArray(props.modelValue) && props.modelValue.includes(item[props.valueKey])
223
+ )
222
224
  })
223
225
  )
224
226
  })
225
- res = res.map((item) => item[props.keyName])
227
+ res = res.map((item) => item[props.labelKey])
226
228
  return res.join(props.separator)
227
229
  } else {
228
230
  //用户确定的值,才显示到输入框
@@ -243,7 +245,7 @@ const inputValue = computed(() => {
243
245
  if (items[0] && Object.prototype.toString.call(items[0]) === '[object Object]') {
244
246
  //对象数组返回id集合
245
247
  items.forEach((element) => {
246
- res.push(element && element['id'])
248
+ res.push(element && element[props.valueKey])
247
249
  })
248
250
  } else {
249
251
  //非对象数组返回元素集合
@@ -267,8 +269,8 @@ const onShowByClickInput = () => {
267
269
  * 获取item需要显示的文字,判别为对象还是文本
268
270
  * */
269
271
  const getItemText = (item: any) => {
270
- if (Object.prototype.toString.call(item) === '[object Object]' && props.keyName) {
271
- return item[props.keyName]
272
+ if (Object.prototype.toString.call(item) === '[object Object]' && props.labelKey) {
273
+ return item[props.labelKey]
272
274
  } else {
273
275
  return item
274
276
  }
@@ -68,9 +68,14 @@ const pickerProps = {
68
68
  default: 5
69
69
  },
70
70
  /** 显示到选项对象中,需要展示的属性键名 */
71
- keyName: {
71
+ labelKey: {
72
72
  type: String,
73
- default: 'text'
73
+ default: 'label'
74
+ },
75
+ /** 显示到选项对象中,需要展示的属性键名 */
76
+ valueKey: {
77
+ type: String,
78
+ default: 'value'
74
79
  },
75
80
  /** 是否允许点击遮罩关闭选择器 */
76
81
  closeOnClickOverlay: {
@@ -1,12 +1,16 @@
1
- export interface PickerColumnVo extends AnyObject {
1
+ export interface PickerColumnVo {
2
2
  /**
3
- * @description id必填
3
+ * value必填,回填根据这个值判断
4
4
  * */
5
- id: string
5
+ value: string | number
6
6
  /**
7
- * @description 显示文本
7
+ * 显示文本
8
8
  * */
9
- text?: string
9
+ label?: string
10
+ /**
11
+ * 任意数据
12
+ * */
13
+ [key: string]: any
10
14
  }
11
15
 
12
16
  export type SelectValueVo = {
@@ -1,251 +1,251 @@
1
- <template>
2
- <view
3
- :class="['hy-popover', customClass]"
4
- :style="customStyle"
5
- id="popover"
6
- @click.stop="popover.noop"
7
- >
8
- <!-- 使用插槽时无法获取正确宽高 -->
9
- <view class="hy-popover__pos hy-popover__hidden" id="pos">
10
- <view class="hy-popover__container">
11
- <view v-if="!slots.content && mode === 'normal'" class="hy-popover__inner">
12
- {{ content }}
13
- </view>
14
- <view
15
- v-if="!slots.content && mode === 'menu' && isArray(content)"
16
- class="hy-popover__menu"
17
- >
18
- <view
19
- v-for="(item, index) in content"
20
- :key="index"
21
- class="hy-popover__menu-inner"
22
- @click="menuClick(index)"
23
- >
24
- <hy-icon
25
- v-if="item.iconClass"
26
- :name="item.iconClass"
27
- custom-class="hy-popover__icon"
28
- />
29
- <text>{{ item.content }}</text>
30
- </view>
31
- </view>
32
- </view>
33
- </view>
34
-
35
- <hy-transition
36
- custom-class="hy-popover__pos"
37
- :custom-style="popover.popStyle.value"
38
- :show="showPopover"
39
- :duration="200"
40
- >
41
- <view class="hy-popover__container">
42
- <!-- 三角形 -->
43
- <view
44
- :class="`hy-popover__arrow ${popover.arrowClass.value}`"
45
- :style="popover.arrowStyle.value"
46
- ></view>
47
- <!-- 三角形 -->
48
-
49
- <!-- 普通模式 -->
50
- <view v-if="!slots.content && mode === 'normal'" class="hy-popover__inner">
51
- {{ content }}
52
- </view>
53
- <!-- 普通模式 -->
54
-
55
- <!-- 列表模式 -->
56
- <view
57
- v-if="!slots.content && mode === 'menu' && isArray(content)"
58
- class="hy-popover__menu"
59
- >
60
- <view
61
- v-for="(item, index) in content"
62
- :key="index"
63
- class="hy-popover__menu-inner"
64
- @click="menuClick(index)"
65
- :style="index === 0 ? 'border-top: none' : ''"
66
- >
67
- <hy-icon
68
- v-if="typeof item === 'object' && item.icon"
69
- :name="item.icon"
70
- custom-class="hy-popover__icon"
71
- />
72
- <view style="display: inline-block">
73
- {{ typeof item === 'object' && item.content ? item.content : item }}
74
- </view>
75
- </view>
76
- </view>
77
- <!-- 列表模式 -->
78
-
79
- <!-- 用户自定义样式 -->
80
- <slot name="content" v-else />
81
- <!-- 用户自定义样式 -->
82
- </view>
83
- <hy-icon
84
- v-if="showClose"
85
- name="close"
86
- custom-class="hy-popover__close-icon"
87
- @click="toggle"
88
- ></hy-icon>
89
- </hy-transition>
90
- <view @click="toggle" class="hy-popover__target" id="target">
91
- <slot />
92
- </view>
93
- </view>
94
- </template>
95
-
96
- <script lang="ts">
97
- export default {
98
- name: 'hy-popover',
99
- options: {
100
- virtualHost: true,
101
- addGlobalClass: true,
102
- styleIsolation: 'shared'
103
- }
104
- }
105
- </script>
106
-
107
- <script lang="ts" setup>
108
- import {
109
- getCurrentInstance,
110
- onBeforeMount,
111
- onBeforeUnmount,
112
- ref,
113
- useSlots,
114
- watch,
115
- inject,
116
- nextTick
117
- } from 'vue'
118
- import type { IPopoverEmits, PopoverExpose } from './typing'
119
- import {
120
- type Queue,
121
- queueKey,
122
- usePopover,
123
- closeOther,
124
- pushToQueue,
125
- removeFromQueue,
126
- isArray
127
- } from '../../libs'
128
- import popoverProps from './props'
129
- // 组件
130
- import HyIcon from '../hy-icon/hy-icon.vue'
131
- import HyTransition from '../hy-transition/hy-transition.vue'
132
-
133
- /**
134
- * 常用于展示提示信息。
135
- * @displayName hy-popover
136
- */
137
- defineOptions({})
138
-
139
- const props = defineProps(popoverProps)
140
- const emit = defineEmits<IPopoverEmits>()
141
-
142
- const slots = useSlots()
143
- const queue = inject<Queue | null>(queueKey, null)
144
- const selector: string = 'popover'
145
- const visibleArrow = ref<boolean>(true)
146
- const { proxy } = getCurrentInstance() as any
147
- const popover = usePopover()
148
- const showPopover = ref<boolean>(false) // 控制popover显隐
149
-
150
- watch(
151
- () => props.content,
152
- (newVal) => {
153
- if (props.mode === 'normal' && typeof newVal !== 'string') {
154
- console.error('在“normal”模式下,值类型必须为字符串类型。')
155
- } else if (props.mode === 'menu' && !isArray(newVal)) {
156
- console.error('在“menu”模式下,值类型必须是数组类型。')
157
- }
158
- }
159
- )
160
-
161
- watch(
162
- () => props.placement,
163
- (newVal) => {
164
- nextTick(() => {
165
- popover.init(newVal, visibleArrow.value, selector)
166
- })
167
- },
168
- { immediate: true }
169
- )
170
-
171
- watch(
172
- () => props.modelValue,
173
- (newValue: boolean) => {
174
- showPopover.value = newValue
175
- }
176
- )
177
-
178
- watch(
179
- () => showPopover.value,
180
- (newValue) => {
181
- if (newValue) {
182
- popover.control(props.placement, props.offset)
183
- if (queue && queue.closeOther) {
184
- queue.closeOther(proxy)
185
- } else {
186
- closeOther(proxy)
187
- }
188
- }
189
- popover.showStyle.value = newValue ? 'display: inline-block;' : 'display: none;'
190
- emit('change', { show: newValue })
191
- emit(`${newValue ? 'open' : 'close'}`)
192
- }
193
- )
194
-
195
- // onMounted(() => {
196
- // setTimeout(() => {
197
- // popover.init(props.placement, visibleArrow.value, selector);
198
- // }, 2000);
199
- // });
200
-
201
- onBeforeMount(() => {
202
- if (queue && queue.pushToQueue) {
203
- queue.pushToQueue(proxy)
204
- } else {
205
- pushToQueue(proxy)
206
- }
207
- popover.showStyle.value = showPopover.value ? 'opacity: 1;' : 'opacity: 0;'
208
- })
209
-
210
- onBeforeUnmount(() => {
211
- if (queue && queue.removeFromQueue) {
212
- queue.removeFromQueue(proxy)
213
- } else {
214
- removeFromQueue(proxy)
215
- }
216
- })
217
-
218
- const menuClick = (index: number) => {
219
- updateModelValue(false)
220
- emit('menuClick', {
221
- item: isArray(props.content) ? props.content[index] : props.content,
222
- index
223
- })
224
- }
225
-
226
- const toggle = () => {
227
- if (props.disabled) return
228
- updateModelValue(!showPopover.value)
229
- }
230
-
231
- const open = () => {
232
- updateModelValue(true)
233
- }
234
-
235
- const close = () => {
236
- updateModelValue(false)
237
- }
238
-
239
- function updateModelValue(value: boolean) {
240
- showPopover.value = value
241
- emit('update:modelValue', value)
242
- }
243
-
244
- defineExpose<PopoverExpose>({
245
- open,
246
- close
247
- })
248
- </script>
249
- <style lang="scss" scoped>
250
- @import './index.scss';
251
- </style>
1
+ <template>
2
+ <view
3
+ :class="['hy-popover', customClass]"
4
+ :style="customStyle"
5
+ id="popover"
6
+ @click.stop="popover.noop"
7
+ >
8
+ <!-- 使用插槽时无法获取正确宽高 -->
9
+ <view class="hy-popover__pos hy-popover__hidden" id="pos">
10
+ <view class="hy-popover__container">
11
+ <view v-if="!slots.content && mode === 'normal'" class="hy-popover__inner">
12
+ {{ content }}
13
+ </view>
14
+ <view
15
+ v-if="!slots.content && mode === 'menu' && isArray(content)"
16
+ class="hy-popover__menu"
17
+ >
18
+ <view
19
+ v-for="(item, index) in content"
20
+ :key="index"
21
+ class="hy-popover__menu-inner"
22
+ @click="menuClick(index)"
23
+ >
24
+ <hy-icon
25
+ v-if="item.iconClass"
26
+ :name="item.iconClass"
27
+ custom-class="hy-popover__icon"
28
+ />
29
+ <text>{{ item.content }}</text>
30
+ </view>
31
+ </view>
32
+ </view>
33
+ </view>
34
+
35
+ <hy-transition
36
+ custom-class="hy-popover__pos"
37
+ :custom-style="popover.popStyle.value"
38
+ :show="showPopover"
39
+ :duration="200"
40
+ >
41
+ <view class="hy-popover__container">
42
+ <!-- 三角形 -->
43
+ <view
44
+ :class="`hy-popover__arrow ${popover.arrowClass.value}`"
45
+ :style="popover.arrowStyle.value"
46
+ ></view>
47
+ <!-- 三角形 -->
48
+
49
+ <!-- 普通模式 -->
50
+ <view v-if="!slots.content && mode === 'normal'" class="hy-popover__inner">
51
+ {{ content }}
52
+ </view>
53
+ <!-- 普通模式 -->
54
+
55
+ <!-- 列表模式 -->
56
+ <view
57
+ v-if="!slots.content && mode === 'menu' && isArray(content)"
58
+ class="hy-popover__menu"
59
+ >
60
+ <view
61
+ v-for="(item, index) in content"
62
+ :key="index"
63
+ class="hy-popover__menu-inner"
64
+ @click="menuClick(index)"
65
+ :style="index === 0 ? 'border-top: none' : ''"
66
+ >
67
+ <hy-icon
68
+ v-if="typeof item === 'object' && item.icon"
69
+ :name="item.icon"
70
+ custom-class="hy-popover__icon"
71
+ />
72
+ <view style="display: inline-block">
73
+ {{ typeof item === 'object' && item.content ? item.content : item }}
74
+ </view>
75
+ </view>
76
+ </view>
77
+ <!-- 列表模式 -->
78
+
79
+ <!-- 用户自定义样式 -->
80
+ <slot name="content" v-else />
81
+ <!-- 用户自定义样式 -->
82
+ </view>
83
+ <hy-icon
84
+ v-if="showClose"
85
+ name="close"
86
+ custom-class="hy-popover__close-icon"
87
+ @click="toggle"
88
+ ></hy-icon>
89
+ </hy-transition>
90
+ <view @click="toggle" class="hy-popover__target" id="target">
91
+ <slot />
92
+ </view>
93
+ </view>
94
+ </template>
95
+
96
+ <script lang="ts">
97
+ export default {
98
+ name: 'hy-popover',
99
+ options: {
100
+ virtualHost: true,
101
+ addGlobalClass: true,
102
+ styleIsolation: 'shared'
103
+ }
104
+ }
105
+ </script>
106
+
107
+ <script lang="ts" setup>
108
+ import {
109
+ getCurrentInstance,
110
+ onBeforeMount,
111
+ onBeforeUnmount,
112
+ ref,
113
+ useSlots,
114
+ watch,
115
+ inject,
116
+ nextTick
117
+ } from 'vue'
118
+ import type { IPopoverEmits, PopoverExpose } from './typing'
119
+ import {
120
+ type Queue,
121
+ queueKey,
122
+ usePopover,
123
+ closeOther,
124
+ pushToQueue,
125
+ removeFromQueue,
126
+ isArray
127
+ } from '../../libs'
128
+ import popoverProps from './props'
129
+ // 组件
130
+ import HyIcon from '../hy-icon/hy-icon.vue'
131
+ import HyTransition from '../hy-transition/hy-transition.vue'
132
+
133
+ /**
134
+ * 常用于展示提示信息。
135
+ * @displayName hy-popover
136
+ */
137
+ defineOptions({})
138
+
139
+ const props = defineProps(popoverProps)
140
+ const emit = defineEmits<IPopoverEmits>()
141
+
142
+ const slots = useSlots()
143
+ const queue = inject<Queue | null>(queueKey, null)
144
+ const selector: string = 'popover'
145
+ const visibleArrow = ref<boolean>(true)
146
+ const { proxy } = getCurrentInstance() as any
147
+ const popover = usePopover()
148
+ const showPopover = ref<boolean>(false) // 控制popover显隐
149
+
150
+ watch(
151
+ () => props.content,
152
+ (newVal) => {
153
+ if (props.mode === 'normal' && typeof newVal !== 'string') {
154
+ console.error('在“normal”模式下,值类型必须为字符串类型。')
155
+ } else if (props.mode === 'menu' && !isArray(newVal)) {
156
+ console.error('在“menu”模式下,值类型必须是数组类型。')
157
+ }
158
+ }
159
+ )
160
+
161
+ watch(
162
+ () => props.placement,
163
+ (newVal) => {
164
+ nextTick(() => {
165
+ popover.init(newVal, visibleArrow.value, selector)
166
+ })
167
+ },
168
+ { immediate: true }
169
+ )
170
+
171
+ watch(
172
+ () => props.modelValue,
173
+ (newValue: boolean) => {
174
+ showPopover.value = newValue
175
+ }
176
+ )
177
+
178
+ watch(
179
+ () => showPopover.value,
180
+ (newValue) => {
181
+ if (newValue) {
182
+ popover.control(props.placement, props.offset)
183
+ if (queue && queue.closeOther) {
184
+ queue.closeOther(proxy)
185
+ } else {
186
+ closeOther(proxy)
187
+ }
188
+ }
189
+ popover.showStyle.value = newValue ? 'display: inline-block;' : 'display: none;'
190
+ emit('change', { show: newValue })
191
+ emit(`${newValue ? 'open' : 'close'}`)
192
+ }
193
+ )
194
+
195
+ // onMounted(() => {
196
+ // setTimeout(() => {
197
+ // popover.init(props.placement, visibleArrow.value, selector);
198
+ // }, 2000);
199
+ // });
200
+
201
+ onBeforeMount(() => {
202
+ if (queue && queue.pushToQueue) {
203
+ queue.pushToQueue(proxy)
204
+ } else {
205
+ pushToQueue(proxy)
206
+ }
207
+ popover.showStyle.value = showPopover.value ? 'opacity: 1;' : 'opacity: 0;'
208
+ })
209
+
210
+ onBeforeUnmount(() => {
211
+ if (queue && queue.removeFromQueue) {
212
+ queue.removeFromQueue(proxy)
213
+ } else {
214
+ removeFromQueue(proxy)
215
+ }
216
+ })
217
+
218
+ const menuClick = (index: number) => {
219
+ updateModelValue(false)
220
+ emit('menuClick', {
221
+ item: isArray(props.content) ? props.content[index] : props.content,
222
+ index
223
+ })
224
+ }
225
+
226
+ const toggle = () => {
227
+ if (props.disabled) return
228
+ updateModelValue(!showPopover.value)
229
+ }
230
+
231
+ const open = () => {
232
+ updateModelValue(true)
233
+ }
234
+
235
+ const close = () => {
236
+ updateModelValue(false)
237
+ }
238
+
239
+ function updateModelValue(value: boolean) {
240
+ showPopover.value = value
241
+ emit('update:modelValue', value)
242
+ }
243
+
244
+ defineExpose<PopoverExpose>({
245
+ open,
246
+ close
247
+ })
248
+ </script>
249
+ <style lang="scss" scoped>
250
+ @import './index.scss';
251
+ </style>