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,96 +1,96 @@
1
- import type { CSSProperties } from "vue";
2
- import type BadgeProps from "../hy-badge/props";
1
+ import type { CSSProperties } from 'vue'
2
+ import type BadgeProps from '../hy-badge/props'
3
3
 
4
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;
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
18
18
  }
19
19
 
20
20
  export default interface HySubmitBarProps {
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;
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
89
89
  }
90
90
 
91
91
  export interface ISubmitBarEmits {
92
- /** 点击按钮触发 */
93
- (e: "click", index: number): void;
94
- /** 点击左侧小菜单图标触发 */
95
- (e: "menuClick", temp: SubmitBarIconMenus, index: number): void;
92
+ /** 点击按钮触发 */
93
+ (e: 'click', index: number): void
94
+ /** 点击左侧小菜单图标触发 */
95
+ (e: 'menuClick', temp: SubmitBarIconMenus, index: number): void
96
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