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,78 +1,78 @@
|
|
|
1
1
|
import type { CSSProperties } from 'vue'
|
|
2
2
|
|
|
3
3
|
export default interface HyCodeInputProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
4
|
+
modelValue: string | number
|
|
5
|
+
/**
|
|
6
|
+
* @description 键盘弹起时,是否自动上推页面(默认 true )
|
|
7
|
+
* */
|
|
8
|
+
adjustPosition?: boolean
|
|
9
|
+
/**
|
|
10
|
+
* @description 最大输入长度(默认 6 )
|
|
11
|
+
* */
|
|
12
|
+
maxlength?: number
|
|
13
|
+
/**
|
|
14
|
+
* @description 显示border
|
|
15
|
+
* */
|
|
16
|
+
border?: boolean
|
|
17
|
+
/**
|
|
18
|
+
* @description 是否用圆点填充(默认 false )
|
|
19
|
+
* */
|
|
20
|
+
dot?: boolean
|
|
21
|
+
/**
|
|
22
|
+
* @description 显示模式,box-盒子模式,line-底部横线模式 (默认 'box' )
|
|
23
|
+
* */
|
|
24
|
+
mode?: 'box' | string
|
|
25
|
+
/**
|
|
26
|
+
* @description 是否细边框 (默认 false )
|
|
27
|
+
* */
|
|
28
|
+
hairline?: boolean
|
|
29
|
+
/**
|
|
30
|
+
* @description 字符间的距离 (默认 10 )
|
|
31
|
+
* */
|
|
32
|
+
space?: number
|
|
33
|
+
/**
|
|
34
|
+
* @description 是否自动获取焦点 (默认 false )
|
|
35
|
+
* */
|
|
36
|
+
focus?: boolean
|
|
37
|
+
/**
|
|
38
|
+
* @description 字体是否加粗 (默认 false )
|
|
39
|
+
* */
|
|
40
|
+
bold?: boolean
|
|
41
|
+
/**
|
|
42
|
+
* @description 字体颜色 (默认 '#606266' )
|
|
43
|
+
* */
|
|
44
|
+
color?: string
|
|
45
|
+
/**
|
|
46
|
+
* @description 字体大小,单位px (默认 18 )
|
|
47
|
+
* */
|
|
48
|
+
fontSize?: number
|
|
49
|
+
/**
|
|
50
|
+
* @description 输入框的大小,宽等于高 (默认 35 )
|
|
51
|
+
* */
|
|
52
|
+
size?: number | string
|
|
53
|
+
/**
|
|
54
|
+
* @description 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true (默认 false )
|
|
55
|
+
* */
|
|
56
|
+
disabledKeyboard?: boolean
|
|
57
|
+
/**
|
|
58
|
+
* @description 边框和线条颜色 (默认 '#c9cacc' )
|
|
59
|
+
* */
|
|
60
|
+
borderColor?: string
|
|
61
|
+
/**
|
|
62
|
+
* @description 是否禁止输入"."符号 (默认 true )
|
|
63
|
+
* */
|
|
64
|
+
disabledDot?: boolean
|
|
65
|
+
/**
|
|
66
|
+
* @description 定义需要用到的外部样式
|
|
67
|
+
* */
|
|
68
|
+
customStyle?: CSSProperties
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
export interface ICodeInputEmits {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
/** 输入内容发生改变时触发 */
|
|
73
|
+
(e: 'change', value: string | number): void
|
|
74
|
+
/** 输入字符个数达maxlength值时触发确认 */
|
|
75
|
+
(e: 'finish', value: string | number): void
|
|
76
|
+
/** 更新值 */
|
|
77
|
+
(e: 'update:modelValue', value: string | number): void
|
|
78
78
|
}
|
|
@@ -1,73 +1,51 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
<view :class="themeClass" :style="themeStyle">
|
|
3
|
+
<!-- @slot 默认插槽 -->
|
|
4
|
+
<slot />
|
|
5
|
+
</view>
|
|
6
6
|
</template>
|
|
7
7
|
|
|
8
8
|
<script lang="ts">
|
|
9
9
|
export default {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
10
|
+
name: 'hy-config-provider',
|
|
11
|
+
options: {
|
|
12
|
+
addGlobalClass: true,
|
|
13
|
+
virtualHost: true,
|
|
14
|
+
styleIsolation: 'shared'
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
17
|
</script>
|
|
18
18
|
|
|
19
19
|
<script setup lang="ts">
|
|
20
|
-
import { computed } from
|
|
21
|
-
import
|
|
22
|
-
import
|
|
20
|
+
import { computed } from 'vue'
|
|
21
|
+
import { addUnit, colorGradient } from '../../libs'
|
|
22
|
+
import configProviderProps from './props'
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* 将 ConfigProvider 组件的 theme 属性设置为 dark,可以开启深色模式。 深色模式会全局生效,使页面上的所有 Wot 组件变为深色风格。
|
|
26
26
|
* @displayName hy-config-provider
|
|
27
27
|
*/
|
|
28
|
-
defineOptions({})
|
|
28
|
+
defineOptions({})
|
|
29
29
|
|
|
30
30
|
// const props = withDefaults(defineProps<IProps>(), defaultProps);
|
|
31
|
-
const props = defineProps(
|
|
32
|
-
/**
|
|
33
|
-
* 主题色,暗色或者默认白色
|
|
34
|
-
* @values dark,light
|
|
35
|
-
* */
|
|
36
|
-
theme: {
|
|
37
|
-
type: String,
|
|
38
|
-
default: "light",
|
|
39
|
-
},
|
|
40
|
-
/** 主题色 */
|
|
41
|
-
themeColor: {
|
|
42
|
-
type: String,
|
|
43
|
-
default: ColorConfig.primary,
|
|
44
|
-
},
|
|
45
|
-
/** 内边距 */
|
|
46
|
-
padding: [String, Number],
|
|
47
|
-
/** 定义需要用到的主题类名 */
|
|
48
|
-
customClass: String,
|
|
49
|
-
/** 定义需要用到的外部样式 */
|
|
50
|
-
customStyle: {
|
|
51
|
-
type: [Object, Array] as PropType<CSSProperties | CSSProperties[]>,
|
|
52
|
-
},
|
|
53
|
-
});
|
|
31
|
+
const props = defineProps(configProviderProps)
|
|
54
32
|
|
|
55
33
|
const themeClass = computed(() => {
|
|
56
|
-
|
|
57
|
-
})
|
|
34
|
+
return [props.customClass, 'hy-config-provider', `hy-theme--${props.theme}`]
|
|
35
|
+
})
|
|
58
36
|
|
|
59
37
|
const themeStyle = computed(() => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
})
|
|
38
|
+
return [
|
|
39
|
+
{
|
|
40
|
+
'--hy-theme-color': props.themeColor,
|
|
41
|
+
'--hy-theme--light': colorGradient(props.themeColor)[90],
|
|
42
|
+
padding: addUnit(props.padding)
|
|
43
|
+
},
|
|
44
|
+
props.customStyle
|
|
45
|
+
]
|
|
46
|
+
})
|
|
69
47
|
</script>
|
|
70
48
|
|
|
71
49
|
<style scoped lang="scss">
|
|
72
|
-
@import
|
|
50
|
+
@import './index.scss';
|
|
73
51
|
</style>
|
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { ColorConfig } from '../../libs/config'
|
|
2
|
+
import type { CSSProperties, PropType } from 'vue'
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
const configProviderProps = {
|
|
5
|
+
/**
|
|
6
|
+
* 主题色,暗色或者默认白色
|
|
7
|
+
* @values dark,light
|
|
8
|
+
* */
|
|
9
|
+
theme: {
|
|
10
|
+
type: String,
|
|
11
|
+
default: 'light'
|
|
12
|
+
},
|
|
13
|
+
/** 主题色 */
|
|
14
|
+
themeColor: {
|
|
15
|
+
type: String,
|
|
16
|
+
default: ColorConfig.primary
|
|
17
|
+
},
|
|
18
|
+
/** 内边距 */
|
|
19
|
+
padding: [String, Number],
|
|
20
|
+
/** 定义需要用到的主题类名 */
|
|
21
|
+
customClass: String,
|
|
22
|
+
/** 定义需要用到的外部样式 */
|
|
23
|
+
customStyle: {
|
|
24
|
+
type: [Object, Array] as PropType<CSSProperties | CSSProperties[]>
|
|
25
|
+
}
|
|
26
|
+
}
|
|
12
27
|
|
|
13
|
-
export default
|
|
28
|
+
export default configProviderProps
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import type { CSSProperties } from 'vue'
|
|
2
2
|
|
|
3
3
|
export default interface HyConfigProviderProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @description dark-暗色、light-亮色
|
|
6
|
+
* */
|
|
7
|
+
theme?: HyApp.DarkModeType
|
|
8
|
+
/**
|
|
9
|
+
* @description 主题色(默认 #3c9cff )
|
|
10
|
+
* */
|
|
11
|
+
themeColor?: string
|
|
12
|
+
/**
|
|
13
|
+
* @description 内边距(默认 10px )
|
|
14
|
+
* */
|
|
15
|
+
padding?: string
|
|
16
|
+
/**
|
|
17
|
+
* @description 定义需要用到的主题类名
|
|
18
|
+
* */
|
|
19
|
+
customClass?: string | string[]
|
|
20
|
+
/**
|
|
21
|
+
* @description 定义需要用到的外部样式
|
|
22
|
+
* */
|
|
23
|
+
customStyle?: CSSProperties | CSSProperties[]
|
|
24
24
|
}
|
|
@@ -1,198 +1,170 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
<view :class="['hy-count-down', customClass]" :style="customStyle">
|
|
3
|
+
<!--
|
|
4
4
|
@slot 默认插槽
|
|
5
5
|
@param {String | Number} record
|
|
6
6
|
-->
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
<slot :record="timeData">
|
|
8
|
+
<text class="hy-count-down__text">{{ formattedTime }}</text>
|
|
9
|
+
</slot>
|
|
10
|
+
</view>
|
|
11
11
|
</template>
|
|
12
12
|
|
|
13
13
|
<script lang="ts">
|
|
14
14
|
export default {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
15
|
+
name: 'hy-count-down',
|
|
16
|
+
options: {
|
|
17
|
+
addGlobalClass: true,
|
|
18
|
+
virtualHost: true,
|
|
19
|
+
styleIsolation: 'shared'
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
22
|
</script>
|
|
23
23
|
|
|
24
24
|
<script setup lang="ts">
|
|
25
|
-
import { onMounted, onUnmounted, ref, watch } from
|
|
26
|
-
import
|
|
27
|
-
import {
|
|
28
|
-
import
|
|
25
|
+
import { onMounted, onUnmounted, ref, watch } from 'vue'
|
|
26
|
+
import { isSameSecond, parseFormat, parseTimeData } from './index'
|
|
27
|
+
import type { ICountDownEmits } from './typing'
|
|
28
|
+
import countDownProps from './props'
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* 一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。
|
|
32
32
|
* @displayName hy-count-down
|
|
33
33
|
*/
|
|
34
|
-
defineOptions({})
|
|
34
|
+
defineOptions({})
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
/** 倒计时时长,单位ms */
|
|
39
|
-
time: {
|
|
40
|
-
type: Number,
|
|
41
|
-
default: 0,
|
|
42
|
-
},
|
|
43
|
-
/** 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 */
|
|
44
|
-
format: {
|
|
45
|
-
type: String,
|
|
46
|
-
default: "HH:mm:ss",
|
|
47
|
-
},
|
|
48
|
-
/** 是否自动开始倒计时 */
|
|
49
|
-
autoStart: {
|
|
50
|
-
type: Boolean,
|
|
51
|
-
default: true,
|
|
52
|
-
},
|
|
53
|
-
/** 是否展示毫秒倒计时 */
|
|
54
|
-
millisecond: {
|
|
55
|
-
type: Boolean,
|
|
56
|
-
default: false,
|
|
57
|
-
},
|
|
58
|
-
/** 定义需要用到的外部样式 */
|
|
59
|
-
customStyle: {
|
|
60
|
-
type: Object as PropType<CSSProperties>,
|
|
61
|
-
},
|
|
62
|
-
/** 自定义外部类名 */
|
|
63
|
-
customClass: String,
|
|
64
|
-
});
|
|
65
|
-
const emit = defineEmits<ICountDownEmits>();
|
|
36
|
+
const props = defineProps(countDownProps)
|
|
37
|
+
const emit = defineEmits<ICountDownEmits>()
|
|
66
38
|
|
|
67
|
-
let timer: any
|
|
39
|
+
let timer: any
|
|
68
40
|
// 各单位(天,时,分等)剩余时间
|
|
69
|
-
const timeData = ref(parseTimeData(props.time))
|
|
41
|
+
const timeData = ref(parseTimeData(props.time))
|
|
70
42
|
// 格式化后的时间,如"03:23:21"
|
|
71
|
-
const formattedTime = ref(
|
|
43
|
+
const formattedTime = ref('')
|
|
72
44
|
// 倒计时是否正在进行中
|
|
73
|
-
const runing = ref(false)
|
|
45
|
+
const runing = ref(false)
|
|
74
46
|
// 结束的毫秒时间戳
|
|
75
|
-
const endTime = ref(0)
|
|
47
|
+
const endTime = ref(0)
|
|
76
48
|
// 剩余的毫秒时间
|
|
77
|
-
const remainTime = ref(0)
|
|
49
|
+
const remainTime = ref(0)
|
|
78
50
|
|
|
79
51
|
watch(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
)
|
|
52
|
+
() => props.time,
|
|
53
|
+
() => reset()
|
|
54
|
+
)
|
|
83
55
|
|
|
84
56
|
onMounted(() => {
|
|
85
|
-
|
|
86
|
-
})
|
|
57
|
+
reset()
|
|
58
|
+
})
|
|
87
59
|
|
|
88
60
|
onUnmounted(() => {
|
|
89
|
-
|
|
90
|
-
})
|
|
61
|
+
clearTimeoutFn()
|
|
62
|
+
})
|
|
91
63
|
|
|
92
64
|
/**
|
|
93
65
|
* @description 开始倒计时
|
|
94
66
|
*/
|
|
95
67
|
const start = () => {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
68
|
+
if (runing.value) return
|
|
69
|
+
// 标识为进行中
|
|
70
|
+
runing.value = true
|
|
71
|
+
// 结束时间戳 = 此刻时间戳 + 剩余的时间
|
|
72
|
+
endTime.value = Date.now() + remainTime.value
|
|
73
|
+
toTick()
|
|
74
|
+
}
|
|
103
75
|
|
|
104
76
|
/**
|
|
105
77
|
* @description 根据是否展示毫秒,执行不同操作函数
|
|
106
78
|
*/
|
|
107
79
|
const toTick = () => {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
const macroTick = () => {
|
|
115
|
-
clearTimeoutFn();
|
|
116
|
-
// 每隔一定时间,更新一遍定时器的值
|
|
117
|
-
// 同时此定时器的作用也能带来毫秒级的更新
|
|
118
|
-
timer = setTimeout(() => {
|
|
119
|
-
// 获取剩余时间
|
|
120
|
-
const remain = getRemainTime();
|
|
121
|
-
// 重设剩余时间
|
|
122
|
-
if (!isSameSecond(remain, remainTime.value) || remain === 0) {
|
|
123
|
-
setRemainTime(remain);
|
|
80
|
+
if (props.millisecond) {
|
|
81
|
+
microTick()
|
|
82
|
+
} else {
|
|
83
|
+
macroTick()
|
|
124
84
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
85
|
+
}
|
|
86
|
+
const macroTick = () => {
|
|
87
|
+
clearTimeoutFn()
|
|
88
|
+
// 每隔一定时间,更新一遍定时器的值
|
|
89
|
+
// 同时此定时器的作用也能带来毫秒级的更新
|
|
90
|
+
timer = setTimeout(() => {
|
|
91
|
+
// 获取剩余时间
|
|
92
|
+
const remain = getRemainTime()
|
|
93
|
+
// 重设剩余时间
|
|
94
|
+
if (!isSameSecond(remain, remainTime.value) || remain === 0) {
|
|
95
|
+
setRemainTime(remain)
|
|
96
|
+
}
|
|
97
|
+
// 如果剩余时间不为0,则继续检查更新倒计时
|
|
98
|
+
if (remainTime.value !== 0) {
|
|
99
|
+
macroTick()
|
|
100
|
+
}
|
|
101
|
+
}, 30)
|
|
102
|
+
}
|
|
131
103
|
|
|
132
104
|
const microTick = () => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
105
|
+
clearTimeoutFn()
|
|
106
|
+
timer = setTimeout(() => {
|
|
107
|
+
setRemainTime(getRemainTime())
|
|
108
|
+
if (remainTime.value !== 0) {
|
|
109
|
+
microTick()
|
|
110
|
+
}
|
|
111
|
+
}, 50)
|
|
112
|
+
}
|
|
141
113
|
|
|
142
114
|
/**
|
|
143
115
|
* @description 获取剩余的时间
|
|
144
116
|
*/
|
|
145
117
|
const getRemainTime = () => {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
118
|
+
// 取最大值,防止出现小于0的剩余时间值
|
|
119
|
+
return Math.max(endTime.value - Date.now(), 0)
|
|
120
|
+
}
|
|
149
121
|
/**
|
|
150
122
|
* @description 设置剩余的时间
|
|
151
123
|
*/
|
|
152
124
|
const setRemainTime = (remain: number) => {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
125
|
+
remainTime.value = remain
|
|
126
|
+
// 根据剩余的毫秒时间,得出该有天,小时,分钟等的值,返回一个对象
|
|
127
|
+
timeData.value = parseTimeData(remain)
|
|
128
|
+
emit('change', timeData.value)
|
|
129
|
+
// 得出格式化后的时间
|
|
130
|
+
formattedTime.value = parseFormat(props.format, timeData.value)
|
|
131
|
+
// 如果时间已到,停止倒计时
|
|
132
|
+
if (remain <= 0) {
|
|
133
|
+
pause()
|
|
134
|
+
emit('finish')
|
|
135
|
+
}
|
|
136
|
+
}
|
|
165
137
|
// 重置倒计时
|
|
166
138
|
const reset = () => {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
139
|
+
pause()
|
|
140
|
+
remainTime.value = props.time
|
|
141
|
+
setRemainTime(remainTime.value)
|
|
142
|
+
if (props.autoStart) {
|
|
143
|
+
start()
|
|
144
|
+
}
|
|
145
|
+
}
|
|
174
146
|
/**
|
|
175
147
|
* @description 暂停倒计时
|
|
176
148
|
* */
|
|
177
149
|
const pause = () => {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
150
|
+
runing.value = false
|
|
151
|
+
clearTimeoutFn()
|
|
152
|
+
}
|
|
181
153
|
/**
|
|
182
154
|
* @description 清空定时器
|
|
183
155
|
* */
|
|
184
156
|
const clearTimeoutFn = () => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
157
|
+
clearTimeout(timer)
|
|
158
|
+
timer = null
|
|
159
|
+
}
|
|
188
160
|
|
|
189
161
|
defineExpose({
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
})
|
|
162
|
+
reset,
|
|
163
|
+
start,
|
|
164
|
+
pause
|
|
165
|
+
})
|
|
194
166
|
</script>
|
|
195
167
|
|
|
196
168
|
<style scoped lang="scss">
|
|
197
|
-
@import
|
|
169
|
+
@import './index.scss';
|
|
198
170
|
</style>
|