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.
- package/components/hy-action-sheet/hy-action-sheet.vue +155 -238
- package/components/hy-action-sheet/props.ts +68 -15
- package/components/hy-action-sheet/typing.d.ts +115 -115
- package/components/hy-address-picker/hy-address-picker.vue +185 -289
- package/components/hy-address-picker/props.ts +97 -21
- package/components/hy-address-picker/typing.d.ts +90 -89
- package/components/hy-avatar/hy-avatar.vue +121 -204
- package/components/hy-avatar/props.ts +76 -18
- package/components/hy-avatar/typing.d.ts +63 -62
- package/components/hy-back-top/hy-back-top.vue +65 -120
- package/components/hy-back-top/props.ts +57 -16
- package/components/hy-back-top/typing.d.ts +43 -42
- package/components/hy-badge/hy-badge.vue +66 -138
- package/components/hy-badge/props.ts +73 -17
- package/components/hy-badge/typing.d.ts +59 -58
- package/components/hy-button/hy-button.vue +226 -375
- package/components/hy-button/props.ts +129 -158
- package/components/hy-calendar/header.vue +48 -64
- package/components/hy-calendar/hy-calendar.vue +274 -438
- package/components/hy-calendar/month.vue +508 -516
- package/components/hy-calendar/props.ts +157 -35
- package/components/hy-calendar/typing.d.ts +129 -128
- package/components/hy-card/hy-card.vue +118 -240
- package/components/hy-card/index.scss +1 -2
- package/components/hy-card/props.ts +122 -27
- package/components/hy-card/typing.d.ts +119 -118
- package/components/hy-cell/hy-cell.vue +176 -258
- package/components/hy-cell/props.ts +71 -17
- package/components/hy-cell/typing.d.ts +87 -86
- package/components/hy-check-button/hy-check-button.vue +69 -139
- package/components/hy-check-button/props.ts +72 -18
- package/components/hy-check-button/typing.d.ts +74 -73
- package/components/hy-checkbox/hy-checkbox.vue +170 -263
- package/components/hy-checkbox/props.ts +94 -24
- package/components/hy-checkbox/typing.d.ts +72 -72
- package/components/hy-checkbox-group/hy-checkbox-group.vue +25 -100
- package/components/hy-checkbox-group/props.ts +80 -0
- package/components/hy-checkbox-group/typing.d.ts +65 -65
- package/components/hy-checkbox-item/hy-checkbox-item.vue +140 -177
- package/components/hy-checkbox-item/props.ts +24 -0
- package/components/hy-checkbox-item/typing.d.ts +4 -3
- package/components/hy-code-input/hy-code-input.vue +179 -262
- package/components/hy-code-input/props.ts +84 -18
- package/components/hy-code-input/typing.d.ts +71 -71
- package/components/hy-config-provider/hy-config-provider.vue +28 -50
- package/components/hy-config-provider/props.ts +26 -11
- package/components/hy-config-provider/typing.d.ts +20 -20
- package/components/hy-count-down/hy-count-down.vue +103 -131
- package/components/hy-count-down/props.ts +30 -8
- package/components/hy-count-down/typing.d.ts +25 -25
- package/components/hy-count-to/hy-count-to.vue +148 -213
- package/components/hy-count-to/props.ts +60 -15
- package/components/hy-count-to/typing.d.ts +46 -46
- package/components/hy-coupon/README.md +133 -0
- package/components/hy-coupon/hy-coupon.vue +180 -0
- package/components/hy-coupon/index.scss +553 -0
- package/components/hy-coupon/props.ts +129 -0
- package/components/hy-coupon/typing.d.ts +146 -0
- package/components/hy-datetime-picker/hy-datetime-picker.vue +415 -580
- package/components/hy-datetime-picker/props.ts +142 -32
- package/components/hy-datetime-picker/typing.d.ts +132 -132
- package/components/hy-divider/hy-divider.vue +90 -169
- package/components/hy-divider/props.ts +78 -19
- package/components/hy-divider/typing.d.ts +60 -60
- package/components/hy-dropdown/hy-dropdown.vue +37 -71
- package/components/hy-dropdown/props.ts +38 -15
- package/components/hy-dropdown/typing.d.ts +44 -44
- package/components/hy-dropdown-item/hy-dropdown-item.vue +141 -173
- package/components/hy-dropdown-item/props.ts +19 -8
- package/components/hy-empty/hy-empty.vue +75 -129
- package/components/hy-empty/props.ts +57 -15
- package/components/hy-empty/typing.d.ts +84 -84
- package/components/hy-flex/hy-flex.vue +33 -88
- package/components/hy-flex/props.ts +58 -0
- package/components/hy-flex/typing.d.ts +14 -16
- package/components/hy-float-button/hy-float-button.vue +289 -406
- package/components/hy-float-button/props.ts +109 -25
- package/components/hy-folding-panel/hy-folding-panel.vue +86 -374
- package/components/hy-folding-panel/props.ts +40 -15
- package/components/hy-folding-panel/typing.d.ts +52 -63
- package/components/hy-folding-panel-item/hy-folding-panel-item.vue +186 -228
- package/components/hy-folding-panel-item/index.scss +87 -0
- package/components/hy-folding-panel-item/props.ts +81 -0
- package/components/hy-folding-panel-item/typing.d.ts +23 -0
- package/components/hy-form/hy-form.vue +172 -212
- package/components/hy-form/props.ts +37 -0
- package/components/hy-form/typing.d.ts +68 -61
- package/components/hy-form-group/typing.d.ts +74 -74
- package/components/hy-form-item/hy-form-item.vue +100 -129
- package/components/hy-form-item/props.ts +25 -0
- package/components/hy-form-item/typing.d.ts +40 -37
- package/components/hy-grid/hy-grid.vue +76 -132
- package/components/hy-grid/props.ts +58 -16
- package/components/hy-grid/typing.d.ts +66 -66
- package/components/hy-icon/hy-icon.vue +84 -161
- package/components/hy-icon/props.ts +76 -22
- package/components/hy-icon/typing.d.ts +83 -82
- package/components/hy-image/hy-image.vue +142 -272
- package/components/hy-image/props.ts +105 -23
- package/components/hy-image/typing.d.ts +84 -87
- package/components/hy-input/hy-input.vue +230 -421
- package/components/hy-input/props.ts +183 -35
- package/components/hy-input/typing.d.ts +169 -169
- package/components/hy-line/hy-line.vue +34 -72
- package/components/hy-line/props.ts +41 -10
- package/components/hy-line/typing.d.ts +29 -29
- package/components/hy-line-progress/hy-line-progress.vue +66 -101
- package/components/hy-line-progress/props.ts +31 -10
- package/components/hy-line-progress/typing.d.ts +29 -29
- package/components/hy-list/hy-list.vue +151 -220
- package/components/hy-list/props.ts +67 -16
- package/components/hy-list/typing.d.ts +52 -52
- package/components/hy-loading/hy-loading.vue +63 -119
- package/components/hy-loading/props.ts +63 -15
- package/components/hy-loading/typing.d.ts +49 -49
- package/components/hy-menu/hy-menu.vue +124 -166
- package/components/hy-menu/props.ts +42 -10
- package/components/hy-menu/typing.d.ts +60 -60
- package/components/hy-modal/hy-modal.vue +127 -218
- package/components/hy-modal/props.ts +89 -24
- package/components/hy-navbar/hy-navbar.vue +104 -177
- package/components/hy-navbar/props.ts +76 -22
- package/components/hy-navbar/typing.d.ts +81 -81
- package/components/hy-notice-bar/hy-notice-bar.vue +67 -144
- package/components/hy-notice-bar/props.ts +80 -19
- package/components/hy-notice-bar/typing.d.ts +62 -62
- package/components/hy-notify/hy-notify.vue +128 -177
- package/components/hy-notify/props.ts +49 -12
- package/components/hy-notify/typing.d.ts +45 -41
- package/components/hy-number-step/hy-number-step.vue +281 -394
- package/components/hy-number-step/props.ts +110 -27
- package/components/hy-number-step/typing.d.ts +120 -120
- package/components/hy-overlay/hy-overlay.vue +39 -66
- package/components/hy-overlay/props.ts +31 -8
- package/components/hy-pagination/hy-pagination.vue +100 -155
- package/components/hy-pagination/props.ts +53 -13
- package/components/hy-picker/hy-picker.vue +309 -430
- package/components/hy-picker/index.scss +8 -12
- package/components/hy-picker/props.ts +110 -26
- package/components/hy-popover/hy-popover.vue +190 -252
- package/components/hy-popover/props.ts +48 -10
- package/components/hy-popup/hy-popup.vue +162 -248
- package/components/hy-popup/props.ts +82 -18
- package/components/hy-price/hy-price.vue +45 -104
- package/components/hy-price/props.ts +52 -12
- package/components/hy-price/typing.d.ts +41 -36
- package/components/hy-qrcode/hy-qrcode.vue +115 -185
- package/components/hy-qrcode/props.ts +68 -18
- package/components/hy-qrcode/typing.d.ts +67 -66
- package/components/hy-radio/hy-radio.vue +161 -259
- package/components/hy-radio/props.ts +95 -25
- package/components/hy-radio/typing.d.ts +85 -84
- package/components/hy-rate/hy-rate.vue +185 -270
- package/components/hy-rate/props.ts +76 -18
- package/components/hy-rate/typing.d.ts +61 -60
- package/components/hy-read-more/hy-read-more.vue +93 -136
- package/components/hy-read-more/props.ts +43 -13
- package/components/hy-scroll-list/hy-scroll-list.vue +81 -102
- package/components/hy-scroll-list/props.ts +22 -11
- package/components/hy-search/hy-search.vue +155 -284
- package/components/hy-search/props.ts +130 -25
- package/components/hy-signature/hy-signature.vue +491 -635
- package/components/hy-signature/props.ts +115 -26
- package/components/hy-signature/typing.d.ts +138 -138
- package/components/hy-slider/hy-slider.vue +388 -477
- package/components/hy-slider/props.ts +75 -19
- package/components/hy-steps/hy-steps.vue +212 -279
- package/components/hy-steps/props.ts +47 -13
- package/components/hy-submit-bar/hy-submit-bar.vue +137 -222
- package/components/hy-submit-bar/props.ts +89 -20
- package/components/hy-submit-bar/typing.d.ts +86 -85
- package/components/hy-subsection/hy-subsection.vue +132 -185
- package/components/hy-subsection/props.ts +50 -17
- package/components/hy-subsection/typing.d.ts +52 -52
- package/components/hy-swipe-action/hy-swipe-action.vue +228 -283
- package/components/hy-swipe-action/props.ts +43 -18
- package/components/hy-swipe-action/typing.d.ts +46 -46
- package/components/hy-swiper/hy-swiper.vue +159 -286
- package/components/hy-swiper/props.ts +126 -28
- package/components/hy-swiper/typing.d.ts +115 -115
- package/components/hy-switch/hy-switch.vue +112 -176
- package/components/hy-switch/props.ts +60 -15
- package/components/hy-switch/typing.d.ts +63 -63
- package/components/hy-tabBar/hy-tabBar.vue +64 -60
- package/components/hy-tabs/hy-tabs.vue +277 -380
- package/components/hy-tabs/props.ts +75 -18
- package/components/hy-tag/hy-tag.vue +111 -204
- package/components/hy-tag/props.ts +81 -19
- package/components/hy-text/hy-text.vue +200 -322
- package/components/hy-text/props.ts +107 -28
- package/components/hy-textarea/hy-textarea.vue +147 -256
- package/components/hy-textarea/props.ts +112 -25
- package/components/hy-textarea/typing.d.ts +42 -42
- package/components/hy-toast/hy-toast.vue +135 -143
- package/components/hy-tooltip/hy-tooltip.vue +220 -306
- package/components/hy-tooltip/props.ts +79 -15
- package/components/hy-transition/hy-transition.vue +111 -138
- package/components/hy-transition/props.ts +30 -8
- package/components/hy-upload/hy-upload.vue +320 -469
- package/components/hy-upload/props.ts +130 -27
- package/components/hy-warn/hy-warn.vue +80 -129
- package/components/hy-warn/props.ts +47 -12
- package/components/hy-waterfall/hy-waterfall.vue +139 -163
- package/components/hy-waterfall/props.ts +19 -7
- package/components/hy-watermark/hy-watermark.vue +762 -870
- package/components/hy-watermark/props.ts +103 -22
- package/global.d.ts +2 -0
- package/libs/css/theme.scss +3 -3
- package/package.json +2 -2
- package/web-types.json +1 -1
- 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
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
36
|
-
import type { CSSProperties
|
|
37
|
-
import type { ISubsectionEmits, SubSectionVo } from
|
|
38
|
-
import { addUnit, getRect, guid } from
|
|
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
|
-
|
|
47
|
-
const
|
|
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
|
-
|
|
100
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
168
|
-
})
|
|
119
|
+
return className
|
|
120
|
+
})
|
|
169
121
|
/**
|
|
170
122
|
* @description 分段器item的样式
|
|
171
123
|
* */
|
|
172
124
|
const itemStyle = computed<CSSProperties>(() => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
200
|
-
};
|
|
201
|
-
});
|
|
151
|
+
})
|
|
202
152
|
|
|
203
153
|
onMounted(() => {
|
|
204
|
-
|
|
205
|
-
})
|
|
154
|
+
init()
|
|
155
|
+
})
|
|
206
156
|
|
|
207
157
|
/**
|
|
208
158
|
* @description 初始化
|
|
209
159
|
* */
|
|
210
160
|
const init = () => {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
-
|
|
221
|
-
innerCurrent.value === -1 ? props.current : innerCurrent.value;
|
|
169
|
+
// 设置默认值当没有找的时候导致样式问题
|
|
170
|
+
innerCurrent.value = innerCurrent.value === -1 ? props.current : innerCurrent.value
|
|
222
171
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
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
|
|
206
|
+
@import './index.scss';
|
|
260
207
|
</style>
|
|
@@ -1,19 +1,52 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type { SubSectionVo } from './typing'
|
|
2
|
+
import type { CSSProperties, PropType } from 'vue'
|
|
2
3
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
52
|
+
export default subsectionProps
|