stellar-ui-v2 1.35.3
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/common/css/common.scss +61 -0
- package/components/ste-animate/README.md +117 -0
- package/components/ste-animate/animate.scss +247 -0
- package/components/ste-animate/ste-animate.vue +200 -0
- package/components/ste-badge/README.md +171 -0
- package/components/ste-badge/ste-badge.vue +238 -0
- package/components/ste-barcode/README.md +36 -0
- package/components/ste-barcode/encode2.js +317 -0
- package/components/ste-barcode/ste-barcode.vue +213 -0
- package/components/ste-button/README.md +129 -0
- package/components/ste-button/ste-button.vue +345 -0
- package/components/ste-calendar/README.md +304 -0
- package/components/ste-calendar/self-date.js +119 -0
- package/components/ste-calendar/ste-calendar.vue +578 -0
- package/components/ste-checkbox/README.md +297 -0
- package/components/ste-checkbox/ste-checkbox.vue +305 -0
- package/components/ste-checkbox-group/ste-checkbox-group.vue +133 -0
- package/components/ste-code-input/README.md +67 -0
- package/components/ste-code-input/ste-code-input.vue +302 -0
- package/components/ste-date-picker/README.md +135 -0
- package/components/ste-date-picker/ste-date-picker.vue +407 -0
- package/components/ste-drag/README.md +103 -0
- package/components/ste-drag/ste-drag.vue +203 -0
- package/components/ste-dropdown-menu/README.md +358 -0
- package/components/ste-dropdown-menu/ste-dropdown-menu.vue +405 -0
- package/components/ste-dropdown-menu-item/ste-dropdown-menu-item.vue +176 -0
- package/components/ste-icon/README.md +90 -0
- package/components/ste-icon/iconfont.css +8 -0
- package/components/ste-icon/ste-icon.vue +147 -0
- package/components/ste-image/README.md +154 -0
- package/components/ste-image/ste-image.vue +218 -0
- package/components/ste-index-item/ste-index-item.vue +96 -0
- package/components/ste-index-list/README.md +153 -0
- package/components/ste-index-list/ste-index-list.vue +128 -0
- package/components/ste-input/README.md +146 -0
- package/components/ste-input/ste-input.vue +480 -0
- package/components/ste-loading/README.md +81 -0
- package/components/ste-loading/ste-loading.vue +166 -0
- package/components/ste-media-preview/README.md +243 -0
- package/components/ste-media-preview/TouchScaleing.js +102 -0
- package/components/ste-media-preview/ste-media-preview.vue +267 -0
- package/components/ste-message-box/README.md +217 -0
- package/components/ste-message-box/ste-message-box.js +72 -0
- package/components/ste-message-box/ste-message-box.vue +380 -0
- package/components/ste-notice-bar/README.md +129 -0
- package/components/ste-notice-bar/ste-notice-bar.vue +331 -0
- package/components/ste-number-keyboard/README.md +246 -0
- package/components/ste-number-keyboard/keyboard.vue +140 -0
- package/components/ste-number-keyboard/ste-number-keyboard.vue +240 -0
- package/components/ste-picker/ste-picker.vue +258 -0
- package/components/ste-popup/README.md +148 -0
- package/components/ste-popup/ste-popup.vue +337 -0
- package/components/ste-price/README.md +129 -0
- package/components/ste-price/ste-price.vue +258 -0
- package/components/ste-progress/README.md +87 -0
- package/components/ste-progress/ste-progress.vue +200 -0
- package/components/ste-qrcode/README.md +50 -0
- package/components/ste-qrcode/ste-qrcode.vue +164 -0
- package/components/ste-qrcode/uqrcode.js +34 -0
- package/components/ste-radio/README.md +286 -0
- package/components/ste-radio/ste-radio.vue +293 -0
- package/components/ste-radio-group/ste-radio-group.vue +128 -0
- package/components/ste-rate/README.md +115 -0
- package/components/ste-rate/ste-rate.vue +202 -0
- package/components/ste-read-more/README.md +111 -0
- package/components/ste-read-more/ste-read-more.vue +133 -0
- package/components/ste-rich-text/README.md +31 -0
- package/components/ste-rich-text/ste-rich-text.vue +70 -0
- package/components/ste-scroll-to/README.md +68 -0
- package/components/ste-scroll-to/mixin.js +173 -0
- package/components/ste-scroll-to/ste-scroll-to.vue +45 -0
- package/components/ste-scroll-to-item/ste-scroll-to-item.vue +25 -0
- package/components/ste-search/README.md +262 -0
- package/components/ste-search/ste-search.vue +547 -0
- package/components/ste-select/README.md +434 -0
- package/components/ste-select/datapager.vue +62 -0
- package/components/ste-select/datetime.vue +106 -0
- package/components/ste-select/defaultDate.js +142 -0
- package/components/ste-select/ste-select.vue +843 -0
- package/components/ste-signature/README.md +105 -0
- package/components/ste-signature/ste-signature.vue +220 -0
- package/components/ste-slider/README.md +165 -0
- package/components/ste-slider/ste-slider.vue +544 -0
- package/components/ste-step/ste-step.vue +264 -0
- package/components/ste-stepper/README.md +170 -0
- package/components/ste-stepper/ste-stepper.vue +373 -0
- package/components/ste-steps/README.md +132 -0
- package/components/ste-steps/ste-steps.vue +65 -0
- package/components/ste-sticky/README.md +52 -0
- package/components/ste-sticky/ste-sticky.vue +127 -0
- package/components/ste-swipe-action/README.md +197 -0
- package/components/ste-swipe-action/ste-swipe-action.vue +303 -0
- package/components/ste-swipe-action-group/ste-swipe-action-group.vue +104 -0
- package/components/ste-swiper/README.md +173 -0
- package/components/ste-swiper/ste-swiper.vue +462 -0
- package/components/ste-swiper-item/ste-swiper-item.vue +41 -0
- package/components/ste-switch/README.md +110 -0
- package/components/ste-switch/ste-switch.vue +144 -0
- package/components/ste-tab/ste-tab.vue +87 -0
- package/components/ste-table/README.md +785 -0
- package/components/ste-table/common.js +8 -0
- package/components/ste-table/ste-table.vue +666 -0
- package/components/ste-table/utils.js +20 -0
- package/components/ste-table-column/checkbox-icon.vue +65 -0
- package/components/ste-table-column/common.scss +65 -0
- package/components/ste-table-column/radio-icon.vue +110 -0
- package/components/ste-table-column/ste-table-column.vue +255 -0
- package/components/ste-table-column/sub-table.vue +116 -0
- package/components/ste-table-column/table-popover.vue +204 -0
- package/components/ste-table-column/var.scss +1 -0
- package/components/ste-tabs/README.md +475 -0
- package/components/ste-tabs/props.js +212 -0
- package/components/ste-tabs/ste-tabs.vue +758 -0
- package/components/ste-text/README.md +66 -0
- package/components/ste-text/ste-text.vue +72 -0
- package/components/ste-toast/README.md +243 -0
- package/components/ste-toast/ste-toast.js +69 -0
- package/components/ste-toast/ste-toast.vue +231 -0
- package/components/ste-touch-swipe/README.md +104 -0
- package/components/ste-touch-swipe/TouchEvent.js +72 -0
- package/components/ste-touch-swipe/ste-touch-swipe.vue +327 -0
- package/components/ste-touch-swipe-item/ste-touch-swipe-item.vue +33 -0
- package/components/ste-tour/README.md +194 -0
- package/components/ste-tour/ste-tour.vue +355 -0
- package/components/ste-tree/README.md +240 -0
- package/components/ste-tree/ste-tree.vue +350 -0
- package/components/ste-upload/README.md +276 -0
- package/components/ste-upload/ReadFile.js +229 -0
- package/components/ste-upload/ste-upload.vue +526 -0
- package/components/ste-video/README.md +60 -0
- package/components/ste-video/props.js +149 -0
- package/components/ste-video/ste-video.vue +647 -0
- package/config/color.js +22 -0
- package/index.js +2 -0
- package/package.json +19 -0
- package/utils/Color.js +66 -0
- package/utils/System.js +110 -0
- package/utils/dayjs.min.js +1 -0
- package/utils/mixin.js +67 -0
- package/utils/store.js +7 -0
- package/utils/utils.js +604 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import utils from '../../utils/utils.js';
|
|
2
|
+
|
|
3
|
+
function isNum(num) {
|
|
4
|
+
return typeof num === 'number' && !isNaN(num);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
props: {
|
|
9
|
+
active: {
|
|
10
|
+
type: Number,
|
|
11
|
+
default: () => 0,
|
|
12
|
+
},
|
|
13
|
+
height: {
|
|
14
|
+
type: [String, Number],
|
|
15
|
+
default: () => '100%',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
data() {
|
|
19
|
+
return {
|
|
20
|
+
dataActive: 0,
|
|
21
|
+
childrenTops: [],
|
|
22
|
+
scrollType: 'init',
|
|
23
|
+
scrollTop: 0,
|
|
24
|
+
_scrollTop: 0,
|
|
25
|
+
initEnd: false,
|
|
26
|
+
contentHeight: 0,
|
|
27
|
+
_scrollTypeTimeout: null,
|
|
28
|
+
_childrenTimeout: null,
|
|
29
|
+
_setActiveTimeout: null,
|
|
30
|
+
_setScrollTopTimeout: null,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
watch: {
|
|
34
|
+
children: {
|
|
35
|
+
handler() {
|
|
36
|
+
this.init();
|
|
37
|
+
},
|
|
38
|
+
immediate: true,
|
|
39
|
+
},
|
|
40
|
+
active: {
|
|
41
|
+
handler(v) {
|
|
42
|
+
if (this.dataActive !== v) this.dataActive = v;
|
|
43
|
+
this.initChildren()
|
|
44
|
+
},
|
|
45
|
+
immediate: true,
|
|
46
|
+
},
|
|
47
|
+
dataActive(v) {
|
|
48
|
+
if (!this.children.length) return;
|
|
49
|
+
if (this.activeChange) this.activeChange(v);
|
|
50
|
+
if (this.scrollType === 'scroll') return;
|
|
51
|
+
const top = this.childrenTops[v];
|
|
52
|
+
if (!isNum(top)) return;
|
|
53
|
+
this.setScrollType('active');
|
|
54
|
+
this.setScrollTopByIndex(v);
|
|
55
|
+
},
|
|
56
|
+
childrenTops() {
|
|
57
|
+
if (!this.children.length) return;
|
|
58
|
+
this.scrollType = 'init';
|
|
59
|
+
this.setScrollTopByIndex(this.dataActive);
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
},
|
|
63
|
+
computed: {
|
|
64
|
+
cmpRootStyle() {
|
|
65
|
+
const style = {
|
|
66
|
+
'--scroll-to-height': utils.formatPx(this.height)
|
|
67
|
+
};
|
|
68
|
+
return style;
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
methods: {
|
|
72
|
+
init() {
|
|
73
|
+
this.initChildren(true);
|
|
74
|
+
},
|
|
75
|
+
initChildren(init) {
|
|
76
|
+
clearTimeout(this._childrenTimeout);
|
|
77
|
+
if (init) this.initEnd = false;
|
|
78
|
+
if (this.initEnd) return
|
|
79
|
+
this._childrenTimeout = setTimeout(async () => {
|
|
80
|
+
const view = await utils.querySelector('.ste-scroll-to-root', this);
|
|
81
|
+
const box = await utils.querySelector('.ste-scroll-to-content', this);
|
|
82
|
+
if (this.contentHeight === box.height) {
|
|
83
|
+
this.initEnd = true;
|
|
84
|
+
} else {
|
|
85
|
+
this.contentHeight = box.height;
|
|
86
|
+
}
|
|
87
|
+
let max = box.height - view.height;
|
|
88
|
+
if (max < 0) max = 0;
|
|
89
|
+
const childrenTops = [];
|
|
90
|
+
for (let i = 0; i < this.children.length; i++) {
|
|
91
|
+
const comp = this.children[i];
|
|
92
|
+
const child = await utils.querySelector('.ste-scroll-to-item-root', comp);
|
|
93
|
+
const top = child.top - box.top;
|
|
94
|
+
childrenTops.push(top > max + 10 ? max + 10 : top);
|
|
95
|
+
}
|
|
96
|
+
let diff = this.childrenTops.length !== childrenTops.length;
|
|
97
|
+
if (!diff) {
|
|
98
|
+
for (let i = 0; i < childrenTops.length; i++) {
|
|
99
|
+
if (childrenTops[i] !== this.childrenTops[i]) {
|
|
100
|
+
diff = true;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (diff) this.childrenTops = childrenTops;
|
|
106
|
+
}, 50);
|
|
107
|
+
},
|
|
108
|
+
setScrollType(type) {
|
|
109
|
+
this.scrollType = type;
|
|
110
|
+
clearTimeout(this._scrollTypeTimeout);
|
|
111
|
+
this._scrollTypeTimeout = setTimeout(() => {
|
|
112
|
+
this.scrollType = 'init';
|
|
113
|
+
}, 150);
|
|
114
|
+
},
|
|
115
|
+
setScrollTopByIndex(index) {
|
|
116
|
+
clearTimeout(this._setScrollTopTimeout);
|
|
117
|
+
this._setScrollTopTimeout = setTimeout(() => {
|
|
118
|
+
if (!index) {
|
|
119
|
+
this.scrollTop = 0;
|
|
120
|
+
this._scrollTop = 0;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const childrenTops = this.childrenTops;
|
|
124
|
+
const top = childrenTops[index];
|
|
125
|
+
if (!isNum(top)) return;
|
|
126
|
+
const scrollTop = this._scrollTop;
|
|
127
|
+
if (scrollTop >= top) {
|
|
128
|
+
const next = childrenTops[index + 1];
|
|
129
|
+
if (!isNum(next)) return;
|
|
130
|
+
if (next > scrollTop + 10) return;
|
|
131
|
+
}
|
|
132
|
+
this.scrollTop = top || 0;
|
|
133
|
+
this._scrollTop = top || 0;
|
|
134
|
+
}, 50);
|
|
135
|
+
},
|
|
136
|
+
setActive(index) {
|
|
137
|
+
if (this.dataActive === index) return;
|
|
138
|
+
this.dataActive = index;
|
|
139
|
+
this.$emit('change', index);
|
|
140
|
+
this.$emit('update:active', index);
|
|
141
|
+
},
|
|
142
|
+
setActiveByTop(scrollTop) {
|
|
143
|
+
clearTimeout(this._setActiveTimeout);
|
|
144
|
+
this._setActiveTimeout = setTimeout(() => {
|
|
145
|
+
if (!scrollTop) {
|
|
146
|
+
this.setActive(0);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const childrenTops = this.childrenTops;
|
|
150
|
+
for (let i = 0; i < childrenTops.length; i++) {
|
|
151
|
+
const top = childrenTops[i];
|
|
152
|
+
if (!isNum(top)) continue;
|
|
153
|
+
const next = childrenTops[i + 1];
|
|
154
|
+
if (!isNum(next) || next === top || (scrollTop >= top && next > scrollTop)) {
|
|
155
|
+
this.setActive(i);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}, 20);
|
|
160
|
+
},
|
|
161
|
+
onScroll({
|
|
162
|
+
detail: {
|
|
163
|
+
scrollTop
|
|
164
|
+
}
|
|
165
|
+
}) {
|
|
166
|
+
this._scrollTop = scrollTop;
|
|
167
|
+
if (this.scrollType === 'active') return;
|
|
168
|
+
this.setScrollType('scroll');
|
|
169
|
+
this.setActiveByTop(scrollTop);
|
|
170
|
+
this.initChildren()
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<scroll-view
|
|
3
|
+
class="ste-scroll-to-root"
|
|
4
|
+
scroll-y
|
|
5
|
+
scroll-anchoring
|
|
6
|
+
:scroll-top="scrollTop"
|
|
7
|
+
:style="[cmpRootStyle]"
|
|
8
|
+
@scroll="onScroll"
|
|
9
|
+
>
|
|
10
|
+
<view class="ste-scroll-to-content">
|
|
11
|
+
<slot />
|
|
12
|
+
</view>
|
|
13
|
+
</scroll-view>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<script>
|
|
17
|
+
import { parentMixin } from '../../utils/mixin.js';
|
|
18
|
+
import mixin from './mixin.js';
|
|
19
|
+
|
|
20
|
+
function isNum(num) {
|
|
21
|
+
return typeof num === 'number' && !isNaN(num);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* ste-scroll-to 滚动锚点
|
|
26
|
+
* @description 滚动锚点
|
|
27
|
+
* @tutorial https://stellar-ui.intecloud.com.cn/pc/index/index?name=ste-scroll-to
|
|
28
|
+
* @property {Number} active 当前激活的锚点index,支持sync双向绑定,默认值0
|
|
29
|
+
* @property {String|Number} height 高度,默认值100%
|
|
30
|
+
* @event {Function} change 滚动锚点时触发
|
|
31
|
+
*/
|
|
32
|
+
export default {
|
|
33
|
+
group: '导航组件',
|
|
34
|
+
title: 'ScrollTo 滚动锚点',
|
|
35
|
+
name: 'ste-scroll-to',
|
|
36
|
+
mixins: [parentMixin('ste-scroll-to'), mixin],
|
|
37
|
+
};
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<style lang="scss" scoped>
|
|
41
|
+
.ste-scroll-to-root {
|
|
42
|
+
width: 100%;
|
|
43
|
+
height: var(--scroll-to-height);
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<view class="ste-scroll-to-item-root">
|
|
3
|
+
<slot />
|
|
4
|
+
</view>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
import utils from '../../utils/utils.js';
|
|
9
|
+
import { childMixin } from '../../utils/mixin.js';
|
|
10
|
+
/**
|
|
11
|
+
* ste-scroll-to-item 锚点项
|
|
12
|
+
* @description 锚点项
|
|
13
|
+
* @tutorial https://stellar-ui.intecloud.com.cn/pc/index/index?name=ste-scroll-to
|
|
14
|
+
*/
|
|
15
|
+
export default {
|
|
16
|
+
name: 'ste-scroll-to-item',
|
|
17
|
+
mixins: [childMixin('ste-scroll-to')],
|
|
18
|
+
};
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<style lang="scss" scoped>
|
|
22
|
+
.ste-scroll-to-item-root {
|
|
23
|
+
width: 100%;
|
|
24
|
+
}
|
|
25
|
+
</style>
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# Search 搜索
|
|
2
|
+
搜索组件,集成了常见搜索框所需功能。
|
|
3
|
+
|
|
4
|
+
---$
|
|
5
|
+
|
|
6
|
+
### 代码演示
|
|
7
|
+
**JavaScript**
|
|
8
|
+
```javascript
|
|
9
|
+
export default {
|
|
10
|
+
data() {
|
|
11
|
+
return {
|
|
12
|
+
value: 'RTX4060Ti',
|
|
13
|
+
hotWords: ['RTX4060', 'RTX4070', 'RTX4080', '小米电视', '华为手机'],
|
|
14
|
+
focus: false,
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
watch: {
|
|
18
|
+
text(v) {
|
|
19
|
+
console.log('watch', v);
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
created() {},
|
|
23
|
+
methods: {
|
|
24
|
+
onInput(v) {
|
|
25
|
+
console.log('input', v);
|
|
26
|
+
},
|
|
27
|
+
onSearch(v) {
|
|
28
|
+
console.log('search', v);
|
|
29
|
+
this.showToast({
|
|
30
|
+
icon: 'none',
|
|
31
|
+
title: `搜索:${v}`,
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
this.showToast({
|
|
35
|
+
icon: 'none',
|
|
36
|
+
title: `点击触发:${v}`,
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
#### 基础用法
|
|
43
|
+
- 通过`input`事件可以捕获用户输入行为,参数为输入的value内容
|
|
44
|
+
- 通过`search`事件可以捕获用户点击`搜索按钮`或`软键盘上的回车`行为,参数为输入的value内容
|
|
45
|
+
- 使用`v-model`属性进行输入框内容的双向绑定
|
|
46
|
+
- 使用`placeholder`属性设置输入框的占位符
|
|
47
|
+
- 使用`disabled`属性禁用组件,组件禁用后全部功能失效
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<ste-search @input="onInput" @search="onSearch" />
|
|
51
|
+
<ste-search v-model="value" @search="onSearch" />
|
|
52
|
+
<ste-search placeholder="搜索商品" @search="onSearch" />
|
|
53
|
+
<ste-search disabled />
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
#### 搜索建议
|
|
57
|
+
- 给`suggestionsList`属性赋值时,会在输入框下方显示,数据结构见下方示例
|
|
58
|
+
- 点击某条建议后会触发搜索的`selectSuggestion`事件,参数为搜索建议对象
|
|
59
|
+
```html
|
|
60
|
+
<ste-input :suggestion-list="suggestionList" @input="suggestionInput" @selectSuggestion="selectSuggestion"/>
|
|
61
|
+
<script>
|
|
62
|
+
export default {
|
|
63
|
+
data() {
|
|
64
|
+
return {
|
|
65
|
+
suggestionList: [],
|
|
66
|
+
// 本地模拟数据搜索
|
|
67
|
+
data: [
|
|
68
|
+
{ label: '三全鲜食(北新泾店)', value: '1全' },
|
|
69
|
+
{ label: 'Hot honey 首尔炸鸡(仙霞路)', value: '2全' },
|
|
70
|
+
{ label: '三贡茶', value: '3全' },
|
|
71
|
+
{ label: '三浮生若茶(凌空soho店', value: '4全' },
|
|
72
|
+
{ label: '三枪会山', value: '5全' },
|
|
73
|
+
{ label: '三爱茜茜里(西郊百联)', value: '6全' },
|
|
74
|
+
{ label: '三港式小铺', value: '7全' },
|
|
75
|
+
{ label: '三蜀香源麻辣香锅', value: '8全' },
|
|
76
|
+
{ label: '饭典*新简餐', value: '9全' },
|
|
77
|
+
{ label: '浏阳蒸菜', value: '10全' },
|
|
78
|
+
],
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
methods: {
|
|
82
|
+
suggestionInput(v) {
|
|
83
|
+
if (v) {
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
this.suggestionList = this.data.filter((e) => e.label.indexOf(v) > -1);
|
|
86
|
+
}, 450);
|
|
87
|
+
} else {
|
|
88
|
+
this.suggestionList = [];
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
selectSuggestion(v) {
|
|
92
|
+
this.showToast({
|
|
93
|
+
icon: 'none',
|
|
94
|
+
title: `选了:${v.label}`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
</script>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### 热词列表
|
|
103
|
+
- 可以通过`hotWords`属性传入热词列表
|
|
104
|
+
- 可以通过`interval`属性设置热词切换间隔,单位为毫秒
|
|
105
|
+
|
|
106
|
+
```html
|
|
107
|
+
<ste-search placeholder="搜索商品" @input="onInput" @search="onSearch" />
|
|
108
|
+
<ste-search :hotWords="hotWords" :interval="1000" @input="onInput" @search="onSearch" />
|
|
109
|
+
```
|
|
110
|
+
#### 自定义按钮文本内容
|
|
111
|
+
- 可以通过`btnText`属性自定义按钮文本内容
|
|
112
|
+
|
|
113
|
+
```html
|
|
114
|
+
<ste-search btnText="查询" @search="onSearch" />
|
|
115
|
+
```
|
|
116
|
+
#### 隐藏分割线以及按钮
|
|
117
|
+
- 可以通过`hiddenLine`属性隐藏分割线
|
|
118
|
+
- 可以通过`hiddenBtn`属性隐藏按钮,隐藏按钮时也会隐藏分割线
|
|
119
|
+
|
|
120
|
+
```html
|
|
121
|
+
<ste-search hiddenLine @search="onSearch" />
|
|
122
|
+
<ste-search hiddenBtn @search="onSearch" />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
#### 隐藏输入框以及按钮
|
|
127
|
+
- 可以通过设置`hiddenInput`属性隐藏输入框 和 `hiddenBtn`属性隐藏按钮只保留放大镜的功能
|
|
128
|
+
|
|
129
|
+
```html
|
|
130
|
+
<view style="width: 60rpx">
|
|
131
|
+
<ste-search hiddenInput hiddenBtn @click="onClick" />
|
|
132
|
+
</view>
|
|
133
|
+
```
|
|
134
|
+
#### 不显示清除图标
|
|
135
|
+
- 可以通过`clearable`属性来切换清除图标是否显示
|
|
136
|
+
|
|
137
|
+
```html
|
|
138
|
+
<ste-search :clearable="false" @search="onSearch" />
|
|
139
|
+
```
|
|
140
|
+
#### 颜色和背景
|
|
141
|
+
- 可以通过`borderColor`属性设置边框颜色
|
|
142
|
+
- 可以通过`background`属性设置背景颜色或者背景图片
|
|
143
|
+
- 可以通过`prefixIconColor`属性设置左侧图标颜色
|
|
144
|
+
- 可以通过`placeholderColor`属性设置占位符颜色
|
|
145
|
+
- 可以通过`inputTextColor`属性设置输入框文字颜色
|
|
146
|
+
- 可以通过`clearIconColor`属性设置清除按钮图标颜色
|
|
147
|
+
- 可以通过`btnBackground`属性设置搜索按钮背景颜色或者背景图片
|
|
148
|
+
- 可以通过`btnTextColor`属性设置搜索按钮文字颜色
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<ste-search
|
|
152
|
+
placeholder="全部颜色"
|
|
153
|
+
borderColor="#F00"
|
|
154
|
+
background="#000"
|
|
155
|
+
prefixIconColor="#a55"
|
|
156
|
+
placeholderColor="#a55"
|
|
157
|
+
inputTextColor="#fff"
|
|
158
|
+
clearIconColor="#a55"
|
|
159
|
+
btnBackground="#fff"
|
|
160
|
+
btnTextColor="#000"
|
|
161
|
+
@search="onSearch"
|
|
162
|
+
/>
|
|
163
|
+
|
|
164
|
+
<ste-search
|
|
165
|
+
placeholder="背景渐变和按钮背景渐变"
|
|
166
|
+
hiddenLine
|
|
167
|
+
borderColor="#F00"
|
|
168
|
+
background="linear-gradient(to right, #aaaaaa, #aaa000)"
|
|
169
|
+
prefixIconColor="#fff"
|
|
170
|
+
placeholderColor="#fff"
|
|
171
|
+
inputTextColor="#fff"
|
|
172
|
+
clearIconColor="#a55"
|
|
173
|
+
btnBackground="linear-gradient(to right, #0AAAAA, #000FFF)"
|
|
174
|
+
btnTextColor="#fff"
|
|
175
|
+
@search="onSearch"
|
|
176
|
+
/>
|
|
177
|
+
|
|
178
|
+
<ste-search
|
|
179
|
+
placeholder="背景图片和按钮背景图片"
|
|
180
|
+
hiddenLine
|
|
181
|
+
borderColor="#F00"
|
|
182
|
+
background="https://image.whzb.com/chain/StellarUI/背景1.png"
|
|
183
|
+
prefixIconColor="#fff"
|
|
184
|
+
placeholderColor="#fff"
|
|
185
|
+
inputTextColor="#fff"
|
|
186
|
+
clearIconColor="#a55"
|
|
187
|
+
btnBackground="https://image.whzb.com/chain/StellarUI/背景2.png"
|
|
188
|
+
btnTextColor="#fff"
|
|
189
|
+
@search="onSearch"
|
|
190
|
+
/>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### 自定义高度以及圆角弧度
|
|
194
|
+
- 可以通过`height`属性设置搜索框高度,默认值`64`
|
|
195
|
+
- 可以通过`radius`属性设置圆角弧度,默认值`32`
|
|
196
|
+
```
|
|
197
|
+
<ste-search :height="120" :radius="60" @search="onSearch" />
|
|
198
|
+
```
|
|
199
|
+
#### 导航模式
|
|
200
|
+
- 可以通过`type`属性设置`nav`开启导航模式;开启后,点击搜索框任意区域都会触发`click`事件,其他功能失效。
|
|
201
|
+
```
|
|
202
|
+
<ste-search type="nav" @click="onClick" :hotWords="hotWords" />
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
#### 聚焦
|
|
206
|
+
- 可以通过`fous`属性控制搜索框聚焦,双向绑定
|
|
207
|
+
```
|
|
208
|
+
<ste-search @click="onClick" :focus.sync="focus" />
|
|
209
|
+
<!--聚焦按钮-->
|
|
210
|
+
<view style="margin: 10px auto 0 auto">
|
|
211
|
+
<ste-button @click="focus = true" width="100%">聚焦</ste-button>
|
|
212
|
+
</view>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
---$
|
|
217
|
+
### API
|
|
218
|
+
#### Props
|
|
219
|
+
| 属性名 | 说明 | 类型 | 默认值 | 可选值 |支持版本 |
|
|
220
|
+
| ----- |----- |----- |----- |----- |----- |
|
|
221
|
+
| `type` | 组件类型 | `String` | `"default"` | `"default"`正常搜索<br/>`"nav"`导航栏 | - |
|
|
222
|
+
| `value` | 输入框默认值,支持`v-model`双向绑定 | `String` | `""` | - | - |
|
|
223
|
+
| `placeholder` | 占位提示符 | `String` | `""` | - | - |
|
|
224
|
+
| `hotWords` | 热词列表 | `String[]`| `[]` | - | - |
|
|
225
|
+
| `interval` | 热词列表自动切换时间间隔,单位`ms` | `Number` | `3000` | - | - |
|
|
226
|
+
| `disabled` | 是否禁用状态 | `Boolean` | `false` | - | - |
|
|
227
|
+
| `hiddenLine` | 是否隐藏分割线 | `Boolean` | `false` | - | - |
|
|
228
|
+
| `hiddenBtn` | 是否隐藏按钮,同时也会隐藏分割线 | `Boolean` | `false` | - | - |
|
|
229
|
+
| `btnText` | 按钮文本内容 | `String` | `"搜索"` | - | - |
|
|
230
|
+
| `hiddenInput` | 是否隐藏输入框 | `Boolean` | `false` | - | - |
|
|
231
|
+
| `clearable` | 是否可清空内容 | `Boolean` | `true` | - | - |
|
|
232
|
+
| `height` | 搜索框高度,单位`rpx` | `Number` | `64` | - | - |
|
|
233
|
+
| `radius` | 圆角弧度,单位`rpx` | `Number` | `32` | - | - |
|
|
234
|
+
| `borderColor` | 边框颜色 | `String` | `"#EEEEEE66"` | - | - |
|
|
235
|
+
| `background` | 背景,可直接传颜色值或者图片 | `String` | `"#FFFFFF"` | - | - |
|
|
236
|
+
| `placeholderColor`| 占位符文本颜色 | `String` | `"#BBBBBB"` | - | - |
|
|
237
|
+
| `prefixIconColor` | 前缀图标颜色 | `String` | `"#BBBBBB"` | - | - |
|
|
238
|
+
| `inputTextColor` | 输入框文本颜色 | `String` | `"#000000"` | - | - |
|
|
239
|
+
| `clearIconColor` | 清除图标颜色 | `String` | `"#BBBBBB"` | - | - |
|
|
240
|
+
| `btnTextColor` | 搜索按钮文本颜色,分割线会跟随文本颜色变化 | `String` | `"#0090FF"` | - | - |
|
|
241
|
+
| `btnBackground` | 搜索按钮背景,可直接传颜色值或者图片 | `String` | - | - | - |
|
|
242
|
+
| `focus` | 是否聚焦(双向绑定) | `Boolean` | `false` | - | `1.1.5` |
|
|
243
|
+
| `autoplay` | 热词列表自动切换 | `Boolean` | `true` | - | `1.11.1` |
|
|
244
|
+
| `suggestionList` | 搜索建议对应的数据 | `Array` | - | | `1.30.1` |
|
|
245
|
+
|
|
246
|
+
#### Events
|
|
247
|
+
您可以通过监听`input`事件,事件参数为用户输入的`value`值,您可以监听该事件获取用户输入的内容。<br/>
|
|
248
|
+
但如"基本使用"中的说明一样,您可以直接使用双向绑定,而无需再次监听`input`事件。
|
|
249
|
+
|事件名 |说明 |事件参数 |支持版本 |
|
|
250
|
+
|--- |--- |--- |--- |
|
|
251
|
+
| `input` | 监听用户输入事件 | `value`: 输入框的值 | - |
|
|
252
|
+
| `search` | 用户确定搜索时触发,用户按回车键,或者手机键盘右下角的"搜索"键时触发 | `value`: 输入框的值 | - |
|
|
253
|
+
| `focus` | 输入框获取焦点时触发 | `value`: 输入框的值 | - |
|
|
254
|
+
| `blur` | 输入框失去焦点时触发 | `value`: 输入框的值 | - |
|
|
255
|
+
| `clear` | 配置了`clearabled`后,清空内容时会发出此事件 | - | - |
|
|
256
|
+
| `click` | 点击任意区域触发 | `value`: 输入框的值 | - |
|
|
257
|
+
| `selectSuggestion`| 点击搜索建议触发 | `value`: 对应的建议对象 | - |
|
|
258
|
+
|
|
259
|
+
---$
|
|
260
|
+
{{xuyajun}}
|
|
261
|
+
|
|
262
|
+
{{qinpengfei}}
|