216 lines
7.7 KiB
Markdown
216 lines
7.7 KiB
Markdown
|
|
|||
|
## next-search-more --搜索更多,搜索下拉,search-more
|
|||
|
|
|||
|
> 遇到问题或有建议可以加入QQ群(<font color=#f00>455948571</font>)反馈
|
|||
|
> 如果觉得组件不错,<font color=#f00>给五星鼓励鼓励</font>咯!
|
|||
|
|
|||
|
|
|||
|
## 使用
|
|||
|
|
|||
|
>[从uniapp插件市场导入](https://ext.dcloud.net.cn/plugin?name=next-search-more)
|
|||
|
|
|||
|
```html
|
|||
|
<template>
|
|||
|
<view class="index">
|
|||
|
<view style="padding: 10px 0;background-color:#000000;color: #fff;font-size: 13px;"><text>1. mode=more模式</text></view>
|
|||
|
<next-search-more mode="more" :showMore="showMore" @moreClick="moreClick">
|
|||
|
<!--以下demo你可以借助第三方的插件实现你想要的任何复杂功能-->
|
|||
|
<template #more>
|
|||
|
<u--form labelWidth="80" labelAlign="right">
|
|||
|
<u-form-item label="radio:">
|
|||
|
<u-radio-group v-model="searchForm.radio" placement="row">
|
|||
|
<u-radio v-for="(item, index) in optionslist" :key="index" :label="item.name" :name="item.name" />
|
|||
|
</u-radio-group>
|
|||
|
</u-form-item>
|
|||
|
<u-form-item label="checkbox:">
|
|||
|
<u-checkbox-group v-model="searchForm.checkbox" placement="row">
|
|||
|
<u-checkbox v-for="(item, index) in optionslist" :key="index" :label="item.name" :name="item.name" />
|
|||
|
</u-checkbox-group>
|
|||
|
</u-form-item>
|
|||
|
<u-form-item label="rate:">
|
|||
|
<u-rate :count="5" v-model="searchForm.rate" />
|
|||
|
</u-form-item>
|
|||
|
<u-form-item label="switch:">
|
|||
|
<u-switch v-model="searchForm.switch"></u-switch>
|
|||
|
</u-form-item>
|
|||
|
<u-form-item label="other:">
|
|||
|
<next-search-select
|
|||
|
:multiple="false"
|
|||
|
:list="options"
|
|||
|
label-key="projectName"
|
|||
|
value-key="id"
|
|||
|
placeholder=" 请选择报备项目"
|
|||
|
title="选择报备项目"
|
|||
|
v-model:value="searchForm.projectId"
|
|||
|
@search="searchFunc"
|
|||
|
@change="changeCallback"
|
|||
|
clearable
|
|||
|
></next-search-select>
|
|||
|
</u-form-item>
|
|||
|
<view class="flex-row">
|
|||
|
<u-button @click="cancel" :customStyle="{margin: '10rpx'}" text="取消"></u-button>
|
|||
|
<u-button @click="comfirm" :customStyle="{margin: '10rpx'}" type="primary" text="确定"></u-button>
|
|||
|
</view>
|
|||
|
</u--form>
|
|||
|
</template>
|
|||
|
</next-search-more>
|
|||
|
<view style="padding: 10px 0;background-color:#000000;color: #fff;font-size: 13px;"><text>2. mode=common;button=outside模式</text></view>
|
|||
|
<next-search-more mode="common" button="outside" />
|
|||
|
<view style="padding: 10px 0;background-color:#000000;color: #fff;font-size: 13px;"><text>3. mode=common;button=inside模式</text></view>
|
|||
|
<next-search-more mode="common" button="inside" />
|
|||
|
<view style="padding: 10px 0;background-color:#000000;color: #fff;font-size: 13px;"><text>4. mode=center;button=outside模式</text></view>
|
|||
|
<next-search-more mode="center" button="outside" />
|
|||
|
<view style="padding: 10px 0;background-color:#000000;color: #fff;font-size: 13px;"><text>5. mode=center;button=inside模式</text></view>
|
|||
|
<next-search-more mode="center" button="inside" />
|
|||
|
<view style="padding: 10px 0;background-color:#000000;color: #fff;font-size: 13px;"><text>6. mode=center;button=inside;isFixedSearchBtn=false模式</text></view>
|
|||
|
<next-search-more mode="center" button="inside" :isFixedSearchBtn="false" />
|
|||
|
<view class="content-block"><text>全站ICON图标海量下载iconfont图标大全,为你优选-包图网,全站ICON图标海量下载iconfont图标大全,为你优选-包图网</text></view>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
```
|
|||
|
|
|||
|
### vue3 + ts 使用
|
|||
|
|
|||
|
```js
|
|||
|
<script lang="ts">
|
|||
|
import { ref, nextTick, toRefs, toRaw, unref, reactive } from 'vue'
|
|||
|
|
|||
|
export default {
|
|||
|
setup() {
|
|||
|
const showMore = ref(false)
|
|||
|
const searchForm = reactive({
|
|||
|
radio: '',
|
|||
|
checkbox: '',
|
|||
|
rate: 3,
|
|||
|
switch: false,
|
|||
|
projectId: ''
|
|||
|
})
|
|||
|
let dataLength = 0
|
|||
|
const options = ref<any>([])
|
|||
|
const optionslist = ref([{
|
|||
|
name: '苹果',
|
|||
|
disabled: false
|
|||
|
},
|
|||
|
{
|
|||
|
name: '香蕉',
|
|||
|
},
|
|||
|
{
|
|||
|
name: '橙子',
|
|||
|
}
|
|||
|
])
|
|||
|
function cancel () {
|
|||
|
showMore.value = false
|
|||
|
}
|
|||
|
function comfirm () {
|
|||
|
showMore.value = false
|
|||
|
}
|
|||
|
function moreClick () {
|
|||
|
showMore.value = !unref(showMore)
|
|||
|
}
|
|||
|
function searchFunc(val?) {
|
|||
|
console.log("搜索的关键字:", val)
|
|||
|
uni.showLoading({
|
|||
|
title: '请稍后...',
|
|||
|
icon: 'none'
|
|||
|
})
|
|||
|
// 模拟ajax请求
|
|||
|
setTimeout(() => {
|
|||
|
options.value = []
|
|||
|
dataLength = 0
|
|||
|
if (dataLength < 40) {
|
|||
|
for (let i = 0; i < 40; i++) {
|
|||
|
options.value.push({
|
|||
|
id: `id-${val ? val + '-' : ''}${dataLength + i}`,
|
|||
|
projectName: `项目item-${val ? val + '-' : ''}${dataLength + i}`,
|
|||
|
ohterKey: `test-${i}`
|
|||
|
})
|
|||
|
}
|
|||
|
dataLength = unref(options).length
|
|||
|
}
|
|||
|
uni.hideLoading()
|
|||
|
}, 1000)
|
|||
|
}
|
|||
|
function changeCallback(item) {
|
|||
|
console.log("选中的item:", item)
|
|||
|
}
|
|||
|
searchFunc()
|
|||
|
return {
|
|||
|
showMore,
|
|||
|
moreClick,
|
|||
|
optionslist,
|
|||
|
searchForm,
|
|||
|
searchFunc,
|
|||
|
options,
|
|||
|
changeCallback,
|
|||
|
comfirm,
|
|||
|
cancel
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
<style lang="scss">
|
|||
|
|
|||
|
.flex-row {
|
|||
|
display: flex;
|
|||
|
justify-content: space-around;
|
|||
|
}
|
|||
|
.content-block {
|
|||
|
border-radius: 20rpx;
|
|||
|
border: 1rpx solid #ccc;
|
|||
|
margin: 20rpx;
|
|||
|
padding: 20rpx;
|
|||
|
}
|
|||
|
</style>
|
|||
|
<style lang="scss">
|
|||
|
page {
|
|||
|
background: #ccc;
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
|
|||
|
```
|
|||
|
### vue2 同样支持,在这里不再写demo
|
|||
|
|
|||
|
### 组件按需加载
|
|||
|
如果不需要组件全局加载,而已把组件拷贝到项目的components目录下,单独引入进来使用即可达到按需加载的效果
|
|||
|
### 预览
|
|||
|
|
|||
|
***
|
|||
|
|
|||
|
| 功能预览 | | 项目中应用演示 |
|
|||
|
| :--------------------------------------------------------------------------:| | :-----------------------------------------------------------------------------:|
|
|||
|
| ![](https://lixueshiaa.github.io/webtest/www/static/next-search-more.gif) | | ![](https://lixueshiaa.github.io/webtest/www/static/next-search-more-demo.gif) |
|
|||
|
|
|||
|
|
|||
|
## 参数
|
|||
|
|
|||
|
|
|||
|
### next-search-more Props
|
|||
|
|
|||
|
可选参数属性列表
|
|||
|
|
|||
|
|参数名 |说明 |类型 |是否必填 |默认值 |可选值 |
|
|||
|
|---- |---- |---- |---- |---- |---- |
|
|||
|
|mode |模式mode,支持common模式 center模式 more模式 |String |否 |common |center,more|
|
|||
|
|button |搜索按钮的模式,支持outside模式 inside模式 |String |否 |outside |inside |
|
|||
|
|isFixedSearchBtn |是否固定搜索按钮 |Boolean |否 |true |false |
|
|||
|
|radius |搜索控件的radius |String, Number |否 |60 |- |
|
|||
|
|placeholder | placeholder |String |否 |请输入搜索内容 |- |
|
|||
|
|backgroundColor |搜索控件的背景颜色 |String |否 |#fff |- |
|
|||
|
|showMore | mode=more模式下,用于控制打开下拉弹层 |Boolean |否 |false |true |
|
|||
|
|border| border |String |否 |1px #f5f5f5 solid |- |
|
|||
|
|
|||
|
|
|||
|
# Event 事件
|
|||
|
|事件名 |说明 |类型 |回调参数 |
|
|||
|
|---- |---- |---- |---- |
|
|||
|
|input |搜索框输入事件 |emit |- |
|
|||
|
|search|搜索触发的事件 |emit |- |
|
|||
|
|moreClick|更多按钮点击触发事件 |emit |- |
|
|||
|
|
|||
|
## Slot 插槽
|
|||
|
|
|||
|
|名称 |说明 |参数 |
|
|||
|
|---- |---- |---- |
|
|||
|
|more |more插槽,在mode=more模式下用于存放下拉框内容 |无 |
|