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,95 +1,96 @@
1
1
  import type { CSSProperties } from 'vue'
2
2
  import type BadgeProps from '../hy-badge/props'
3
3
 
4
- export interface IconMenus {
5
- /**
6
- * @description icon图标
7
- * */
8
- icon: string
9
- /**
10
- * @description 文本
11
- * */
12
- text: string
13
- /**
14
- * @description 徽标值
15
- * */
16
- badge?: BadgeProps['badge']
4
+ export interface SubmitBarIconMenus {
5
+ /**
6
+ * @description icon图标
7
+ * */
8
+ icon: string
9
+ /**
10
+ * @description 文本
11
+ * */
12
+ text: string
13
+ /**
14
+ * @description 徽标值
15
+ * */
16
+ badge?: BadgeProps['badge']
17
+ [key: string]: any
17
18
  }
18
19
 
19
20
  export default interface HySubmitBarProps {
20
- /**
21
- * @description 左边菜单栏
22
- * */
23
- menus?: IconMenus[]
24
- /**
25
- * @description 绝对定位
26
- * */
27
- fixed?: boolean
28
- /**
29
- * @description 是否显示边框
30
- * */
31
- border?: boolean
32
- /**
33
- * @description 加载左边按钮loading
34
- * */
35
- leftLoading?: boolean
36
- /**
37
- * @description 加载右边按钮loading
38
- * */
39
- rightLoading?: boolean
40
- /**
41
- * @description 左边icon的颜色
42
- * */
43
- iconColor?: string
44
- /**
45
- * @description 左边文字的颜色
46
- * */
47
- iconLabelColor?: string
48
- /**
49
- * @description 右边按钮文字颜色
50
- * */
51
- textColor?: string
52
- /**
53
- * @description 显示左边按钮
54
- * */
55
- showLeftBtn?: boolean
56
- /**
57
- * @description 显示右边按钮
58
- * */
59
- showRightBtn?: boolean
60
- /**
61
- * @description 左边按钮文字
62
- * */
63
- leftBtnText?: string
64
- /**
65
- * @description 右边按钮文字
66
- * */
67
- rightBtnText?: string
68
- /**
69
- * @description 左边按钮颜色,支持渐变色
70
- * */
71
- leftBtnColor?: string
72
- /**
73
- * @description 有边按钮颜色,支持渐变色
74
- * */
75
- rightBtnColor?: string
76
- /**
77
- * @description 按钮的形状
78
- * */
79
- shape?: HyApp.ShapeType
80
- /**
81
- * @description 按钮点击等待时长(运用了节流方法)
82
- * */
83
- warn?: number
84
- /**
85
- * @description 定义需要用到的外部样式
86
- * */
87
- customStyle?: CSSProperties
21
+ /**
22
+ * @description 左边菜单栏
23
+ * */
24
+ menus?: IconMenus[]
25
+ /**
26
+ * @description 绝对定位
27
+ * */
28
+ fixed?: boolean
29
+ /**
30
+ * @description 是否显示边框
31
+ * */
32
+ border?: boolean
33
+ /**
34
+ * @description 加载左边按钮loading
35
+ * */
36
+ leftLoading?: boolean
37
+ /**
38
+ * @description 加载右边按钮loading
39
+ * */
40
+ rightLoading?: boolean
41
+ /**
42
+ * @description 左边icon的颜色
43
+ * */
44
+ iconColor?: string
45
+ /**
46
+ * @description 左边文字的颜色
47
+ * */
48
+ iconLabelColor?: string
49
+ /**
50
+ * @description 右边按钮文字颜色
51
+ * */
52
+ textColor?: string
53
+ /**
54
+ * @description 显示左边按钮
55
+ * */
56
+ showLeftBtn?: boolean
57
+ /**
58
+ * @description 显示右边按钮
59
+ * */
60
+ showRightBtn?: boolean
61
+ /**
62
+ * @description 左边按钮文字
63
+ * */
64
+ leftBtnText?: string
65
+ /**
66
+ * @description 右边按钮文字
67
+ * */
68
+ rightBtnText?: string
69
+ /**
70
+ * @description 左边按钮颜色,支持渐变色
71
+ * */
72
+ leftBtnColor?: string
73
+ /**
74
+ * @description 有边按钮颜色,支持渐变色
75
+ * */
76
+ rightBtnColor?: string
77
+ /**
78
+ * @description 按钮的形状
79
+ * */
80
+ shape?: HyApp.ShapeType
81
+ /**
82
+ * @description 按钮点击等待时长(运用了节流方法)
83
+ * */
84
+ warn?: number
85
+ /**
86
+ * @description 定义需要用到的外部样式
87
+ * */
88
+ customStyle?: CSSProperties
88
89
  }
89
90
 
90
91
  export interface ISubmitBarEmits {
91
- /** 点击按钮触发 */
92
- (e: 'click', index: number): void
93
- /** 点击左侧小菜单图标触发 */
94
- (e: 'menuClick', index: number): void
92
+ /** 点击按钮触发 */
93
+ (e: 'click', index: number): void
94
+ /** 点击左侧小菜单图标触发 */
95
+ (e: 'menuClick', temp: SubmitBarIconMenus, index: number): void
95
96
  }
@@ -1,260 +1,207 @@
1
1
  <template>
2
- <view
3
- ref="hy-subsection"
4
- :class="[`hy-subsection__${mode}`, 'hy-subsection', customClass]"
5
- :style="[customStyle, wrapperStyle]"
6
- >
7
- <view ref="hy-subsection__bar" :style="barStyle" :class="barClass"></view>
8
2
  <view
9
- :class="wrapperClass(index)"
10
- :ref="`hy-subsection__item--${index}`"
11
- :style="itemStyle"
12
- @tap="clickHandler(item, index)"
13
- v-for="(item, index) in list"
14
- :key="index"
3
+ ref="hy-subsection"
4
+ :class="[`hy-subsection__${mode}`, 'hy-subsection', customClass]"
5
+ :style="[customStyle, wrapperStyle]"
15
6
  >
16
- <text class="hy-subsection__item--text" :style="[textStyle(index)]">{{
17
- getName(item)
18
- }}</text>
7
+ <view ref="hy-subsection__bar" :style="barStyle" :class="barClass"></view>
8
+ <view
9
+ :class="wrapperClass(index)"
10
+ :ref="`hy-subsection__item--${index}`"
11
+ :style="itemStyle"
12
+ @tap="clickHandler(item, index)"
13
+ v-for="(item, index) in list"
14
+ :key="index"
15
+ >
16
+ <text class="hy-subsection__item--text" :style="[textStyle(index)]">{{
17
+ getName(item)
18
+ }}</text>
19
+ </view>
19
20
  </view>
20
- </view>
21
21
  </template>
22
22
 
23
23
  <script lang="ts">
24
24
  export default {
25
- name: "hy-subsection",
26
- options: {
27
- addGlobalClass: true,
28
- virtualHost: true,
29
- styleIsolation: "shared",
30
- },
31
- };
25
+ name: 'hy-subsection',
26
+ options: {
27
+ addGlobalClass: true,
28
+ virtualHost: true,
29
+ styleIsolation: 'shared'
30
+ }
31
+ }
32
32
  </script>
33
33
 
34
34
  <script setup lang="ts">
35
- import { computed, ref, onMounted, getCurrentInstance } from "vue";
36
- import type { CSSProperties, PropType } from "vue";
37
- import type { ISubsectionEmits, SubSectionVo } from "./typing";
38
- import { addUnit, getRect, guid } from "../../libs";
35
+ import { computed, ref, onMounted, getCurrentInstance } from 'vue'
36
+ import type { CSSProperties } from 'vue'
37
+ import type { ISubsectionEmits, SubSectionVo } from './typing'
38
+ import { addUnit, getRect, guid } from '../../libs'
39
+ import subsectionProps from './props'
39
40
 
40
41
  /**
41
42
  * 该分段器一般用于用户从几个选项中选择某一个的场景
42
43
  * @displayName hy-subsection
43
44
  */
44
- defineOptions({});
45
+ defineOptions({})
45
46
 
46
- // const props = withDefaults(defineProps<IProps>(), defaultProps);
47
- const props = defineProps({
48
- /** 接收值 */
49
- modelValue: [String, Number],
50
- /** 默认值 */
51
- current: {
52
- type: Number,
53
- default: 0,
54
- },
55
- /** tab的数据 */
56
- list: {
57
- type: Array as PropType<SubSectionVo[]>,
58
- default: () => [],
59
- },
60
- /** list的键值 */
61
- customKeys: {
62
- type: Object,
63
- default: () => ({ name: "name", value: "value" }),
64
- },
65
- /** 激活时的颜色 */
66
- activeColor: String,
67
- /** 未激活时的颜色 */
68
- inactiveColor: String,
69
- /**
70
- * 模式选择,mode=button为按钮形式,mode=subsection时为分段模式
71
- * @values button,subsection
72
- * */
73
- mode: {
74
- type: String,
75
- default: "button",
76
- },
77
- /** 字体大小,单位px */
78
- fontSize: {
79
- type: Number,
80
- default: 12,
81
- },
82
- /** 激活选项的字体是否加粗 */
83
- bold: {
84
- type: Boolean,
85
- default: true,
86
- },
87
- /** 组件背景颜色,mode为button时有效 */
88
- bgColor: String,
89
- /** 定义需要用到的外部样式 */
90
- customStyle: Object as PropType<CSSProperties>,
91
- /** 自定义外部类名 */
92
- customClass: String,
93
- });
94
- const emit = defineEmits<ISubsectionEmits>();
47
+ const props = defineProps(subsectionProps)
48
+ const emit = defineEmits<ISubsectionEmits>()
95
49
 
96
- const instance = getCurrentInstance();
50
+ const instance = getCurrentInstance()
97
51
  // 组件尺寸
98
52
  const itemRect = ref<UniApp.NodeInfo>({
99
- width: 0,
100
- height: 0,
101
- });
102
- const innerCurrent = ref<number>(0);
103
- const guidClass = guid();
53
+ width: 0,
54
+ height: 0
55
+ })
56
+ const innerCurrent = ref<number>(0)
57
+ const guidClass = guid()
104
58
 
105
59
  /**
106
60
  * @description 容器样式
107
61
  * */
108
62
  const wrapperStyle = computed<CSSProperties>(() => {
109
- const style: CSSProperties = {};
110
- // button模式时,设置背景色
111
- if (props.mode === "button") {
112
- style.backgroundColor = props.bgColor;
113
- }
114
- return style;
115
- });
63
+ const style: CSSProperties = {}
64
+ // button模式时,设置背景色
65
+ if (props.mode === 'button') {
66
+ style.backgroundColor = props.bgColor
67
+ }
68
+ return style
69
+ })
116
70
  /**
117
71
  * @description 容器类名
118
72
  * */
119
73
  const wrapperClass = computed(() => {
120
- return (index: number) => {
121
- return [
122
- "hy-subsection__item",
123
- "cursor-pointer",
124
- `hy-subsection__item--${innerCurrent.value}__${guidClass}`,
125
- `hy-subsection__item--${props.mode}`,
126
- index < props.list.length - 1 && "hy-subsection__item--no-border-right",
127
- index === 0 && "hy-subsection__item--first",
128
- index === props.list.length - 1 && "hy-subsection__item--last",
129
- ];
130
- };
131
- });
74
+ return (index: number) => {
75
+ return [
76
+ 'hy-subsection__item',
77
+ 'cursor-pointer',
78
+ `hy-subsection__item--${innerCurrent.value}__${guidClass}`,
79
+ `hy-subsection__item--${props.mode}`,
80
+ index < props.list.length - 1 && 'hy-subsection__item--no-border-right',
81
+ index === 0 && 'hy-subsection__item--first',
82
+ index === props.list.length - 1 && 'hy-subsection__item--last'
83
+ ]
84
+ }
85
+ })
132
86
  /**
133
87
  * @description 滑块的样式
134
88
  * */
135
89
  const barStyle = computed<CSSProperties>(() => {
136
- const style: CSSProperties = {};
137
- style.width = `${itemRect.value.width}px`;
138
- style.height = `${itemRect.value.height}px`;
139
- // 通过translateX移动滑块,其移动的距离为索引*item的宽度
140
- style.transform = `translateX(${innerCurrent.value * itemRect.value.width!}px)`;
141
- if (props.mode === "subsection") {
142
- // 在subsection模式下,需要动态设置滑块的圆角,因为移动滑块使用的是translateX,无法通过父元素设置overflow: hidden隐藏滑块的直角
143
- style.backgroundColor = props.activeColor;
144
- }
145
- return style;
146
- });
90
+ const style: CSSProperties = {}
91
+ style.width = `${itemRect.value.width}px`
92
+ style.height = `${itemRect.value.height}px`
93
+ // 通过translateX移动滑块,其移动的距离为索引*item的宽度
94
+ style.transform = `translateX(${innerCurrent.value * itemRect.value.width!}px)`
95
+ if (props.mode === 'subsection') {
96
+ // 在subsection模式下,需要动态设置滑块的圆角,因为移动滑块使用的是translateX,无法通过父元素设置overflow: hidden隐藏滑块的直角
97
+ style.backgroundColor = props.activeColor
98
+ }
99
+ return style
100
+ })
147
101
  /**
148
102
  * @description 滑块的类目
149
103
  * */
150
104
  const barClass = computed(() => {
151
- let className: string[] = ["hy-subsection__bar", "cursor-pointer"];
152
- const className_2 = [
153
- props.mode === "button" && "hy-subsection__button--bar",
154
- innerCurrent.value === 0 &&
155
- props.mode === "subsection" &&
156
- "hy-subsection__bar--first",
157
- innerCurrent.value > 0 &&
158
- innerCurrent.value < props.list.length - 1 &&
159
- props.mode === "subsection" &&
160
- "hy-subsection__bar--center",
161
- innerCurrent.value === props.list.length - 1 &&
162
- props.mode === "subsection" &&
163
- "hy-subsection__bar--last",
164
- ].filter(Boolean) as string[];
165
- className = className.concat(className_2);
105
+ let className: string[] = ['hy-subsection__bar', 'cursor-pointer']
106
+ const className_2 = [
107
+ props.mode === 'button' && 'hy-subsection__button--bar',
108
+ innerCurrent.value === 0 && props.mode === 'subsection' && 'hy-subsection__bar--first',
109
+ innerCurrent.value > 0 &&
110
+ innerCurrent.value < props.list.length - 1 &&
111
+ props.mode === 'subsection' &&
112
+ 'hy-subsection__bar--center',
113
+ innerCurrent.value === props.list.length - 1 &&
114
+ props.mode === 'subsection' &&
115
+ 'hy-subsection__bar--last'
116
+ ].filter(Boolean) as string[]
117
+ className = className.concat(className_2)
166
118
 
167
- return className;
168
- });
119
+ return className
120
+ })
169
121
  /**
170
122
  * @description 分段器item的样式
171
123
  * */
172
124
  const itemStyle = computed<CSSProperties>(() => {
173
- const style: CSSProperties = {};
174
- if (props.mode === "subsection") {
175
- // 设置border的样式
176
- style.borderColor = props.activeColor;
177
- style.borderWidth = "1px";
178
- style.borderStyle = "solid";
179
- }
180
- return style;
181
- });
125
+ const style: CSSProperties = {}
126
+ if (props.mode === 'subsection') {
127
+ // 设置border的样式
128
+ style.borderColor = props.activeColor
129
+ style.borderWidth = '1px'
130
+ style.borderStyle = 'solid'
131
+ }
132
+ return style
133
+ })
182
134
  /**
183
135
  * @description 分段器文字颜色
184
136
  * */
185
137
  const textStyle = computed(() => {
186
- return (index: number): CSSProperties => {
187
- const style: CSSProperties = {};
188
- style.fontWeight =
189
- props.bold && innerCurrent.value === index ? "bold" : "normal";
190
- style.fontSize = addUnit(props.fontSize);
191
- // subsection模式下,激活时默认为白色的文字
192
- if (props.mode === "subsection") {
193
- style.color = innerCurrent.value === index ? "#fff" : props.inactiveColor;
194
- } else {
195
- // button模式下,激活时文字颜色默认为activeColor
196
- style.color =
197
- innerCurrent.value === index ? props.activeColor : props.inactiveColor;
138
+ return (index: number): CSSProperties => {
139
+ const style: CSSProperties = {}
140
+ style.fontWeight = props.bold && innerCurrent.value === index ? 'bold' : 'normal'
141
+ style.fontSize = addUnit(props.fontSize)
142
+ // subsection模式下,激活时默认为白色的文字
143
+ if (props.mode === 'subsection') {
144
+ style.color = innerCurrent.value === index ? '#fff' : props.inactiveColor
145
+ } else {
146
+ // button模式下,激活时文字颜色默认为activeColor
147
+ style.color = innerCurrent.value === index ? props.activeColor : props.inactiveColor
148
+ }
149
+ return style
198
150
  }
199
- return style;
200
- };
201
- });
151
+ })
202
152
 
203
153
  onMounted(() => {
204
- init();
205
- });
154
+ init()
155
+ })
206
156
 
207
157
  /**
208
158
  * @description 初始化
209
159
  * */
210
160
  const init = () => {
211
- innerCurrent.value = props.list.findIndex((item: SubSectionVo) => {
212
- if (typeof item === "string" || typeof item === "number") {
213
- return item === props.modelValue;
214
- } else {
215
- return item[props.customKeys.value] === props.modelValue;
216
- }
217
- });
161
+ innerCurrent.value = props.list.findIndex((item: SubSectionVo) => {
162
+ if (typeof item === 'string' || typeof item === 'number') {
163
+ return item === props.modelValue
164
+ } else {
165
+ return item[props.customKeys.value] === props.modelValue
166
+ }
167
+ })
218
168
 
219
- // 设置默认值当没有找的时候导致样式问题
220
- innerCurrent.value =
221
- innerCurrent.value === -1 ? props.current : innerCurrent.value;
169
+ // 设置默认值当没有找的时候导致样式问题
170
+ innerCurrent.value = innerCurrent.value === -1 ? props.current : innerCurrent.value
222
171
 
223
- // TODO: 多个数组在一起计算宽度, 宽度不一样会有问题,所以必须加guidClass随机数
224
- getRect(`.hy-subsection__item--0__${guidClass}`, false, instance).then(
225
- (size) => {
226
- itemRect.value = size as UniApp.NodeInfo;
227
- },
228
- );
229
- };
172
+ // TODO: 多个数组在一起计算宽度, 宽度不一样会有问题,所以必须加guidClass随机数
173
+ getRect(`.hy-subsection__item--0__${guidClass}`, false, instance).then((size) => {
174
+ itemRect.value = size as UniApp.NodeInfo
175
+ })
176
+ }
230
177
 
231
178
  /**
232
179
  * @description 判断值
233
180
  * */
234
181
  const getValue = (item: SubSectionVo) => {
235
- return typeof item === "object" ? item[props.customKeys.value] : item;
236
- };
182
+ return typeof item === 'object' ? item[props.customKeys.value] : item
183
+ }
237
184
 
238
185
  /**
239
186
  * @description 判断展示文本
240
187
  * */
241
188
  const getName = (item: SubSectionVo) => {
242
- return typeof item === "object" ? item[props.customKeys.name] : item;
243
- };
189
+ return typeof item === 'object' ? item[props.customKeys.name] : item
190
+ }
244
191
 
245
192
  /**
246
193
  * @description 点击事件
247
194
  * */
248
195
  const clickHandler = (temp: SubSectionVo, index: number) => {
249
- // 值改变才触发
250
- if (innerCurrent.value !== index) {
251
- emit("change", index);
252
- emit("update:modelValue", getValue(temp));
253
- }
254
- innerCurrent.value = index;
255
- };
196
+ // 值改变才触发
197
+ if (innerCurrent.value !== index) {
198
+ emit('change', index)
199
+ emit('update:modelValue', getValue(temp))
200
+ }
201
+ innerCurrent.value = index
202
+ }
256
203
  </script>
257
204
 
258
205
  <style lang="scss" scoped>
259
- @import "./index.scss";
206
+ @import './index.scss';
260
207
  </style>
@@ -1,19 +1,52 @@
1
- import type IProps from "./typing";
1
+ import type { SubSectionVo } from './typing'
2
+ import type { CSSProperties, PropType } from 'vue'
2
3
 
3
- const defaultProps: IProps = {
4
- modelValue: "",
5
- current: 0,
6
- list: [],
7
- customKeys: {
8
- name: "name",
9
- value: "value",
10
- },
11
- activeColor: "",
12
- inactiveColor: "",
13
- mode: "button",
14
- fontSize: 12,
15
- bold: true,
16
- bgColor: "",
17
- };
4
+ const subsectionProps = {
5
+ /** 接收值 */
6
+ modelValue: [String, Number],
7
+ /** 默认值 */
8
+ current: {
9
+ type: Number,
10
+ default: 0
11
+ },
12
+ /** tab的数据 */
13
+ list: {
14
+ type: Array as PropType<SubSectionVo[]>,
15
+ default: () => []
16
+ },
17
+ /** list的键值 */
18
+ customKeys: {
19
+ type: Object,
20
+ default: () => ({ name: 'name', value: 'value' })
21
+ },
22
+ /** 激活时的颜色 */
23
+ activeColor: String,
24
+ /** 未激活时的颜色 */
25
+ inactiveColor: String,
26
+ /**
27
+ * 模式选择,mode=button为按钮形式,mode=subsection时为分段模式
28
+ * @values button,subsection
29
+ * */
30
+ mode: {
31
+ type: String,
32
+ default: 'button'
33
+ },
34
+ /** 字体大小,单位px */
35
+ fontSize: {
36
+ type: Number,
37
+ default: 12
38
+ },
39
+ /** 激活选项的字体是否加粗 */
40
+ bold: {
41
+ type: Boolean,
42
+ default: true
43
+ },
44
+ /** 组件背景颜色,mode为button时有效 */
45
+ bgColor: String,
46
+ /** 定义需要用到的外部样式 */
47
+ customStyle: Object as PropType<CSSProperties>,
48
+ /** 自定义外部类名 */
49
+ customClass: String
50
+ }
18
51
 
19
- export default defaultProps;
52
+ export default subsectionProps