1.0.1 • Published 2 years ago

uni-multiple-select v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

uni-app 多选select组件、select搜索选择页组件

多选select组件

介绍

  1. 多选select组件目前只支持多选,单选请用单选select组件

  2. 支持配置关键字段

  3. 兼容多平台小程序、H5

平台差异说明

H5微信小程序支付宝小程序百度小程序头条小程序

使用方式

安装

npm i uni-multiple-select

引入

uni-app的easycom在打包的时候是按需引入的,您可以放心引入的组件库,发布打包时会自动剔除您没有使用的组件

pages.json里面配置如下

{
  "easycom": {
    "^lp-(.*)": "uni-multiple-select/components/lp-$1/index.vue"
  },
  "pages": [
    //...
  ]
}

vue.config.js里面配置如下

module.exports = {
  transpileDependencies: [
    'uni-multiple-select', 'uview-ui'
  ]
}

基本使用

<lp-multiple-select
  v-model="show"
  :list="list"
/>
data() {
  return {
    // 数据源
    list: [{
      label: "皮皮虾",
      value: "1"
    },{
      label: "小龙虾",
      value: "2",
      disabled: true // 禁用
    },{
      label: "大龙虾",
      value: "3"
    },{
      label: "石头蟹",
      value: "4"
    }]
  };
}

默认选中项(回显)

<lp-multiple-select
  v-model="show"
  :list="list"
  :default-value="defaultSelected"
/>
data() {
  return {
    defaultSelected: ["1", "4"] // 默认选中项(value)
  }
}

配置label、value对应的key名称

<lp-multiple-select
  v-model="show"
  :list="list"
  :default-value="defaultSelected"
  label-name="text"
  value-name="id"
  @confirm="confirm"
/>

获取点击确认后的结果

<lp-multiple-select
  v-model="show"
  :list="list"
  @confirm="confirm"
/>
methods: {
  // 确认事件
  confirm(selectedData, selectedDataIds) {
    console.log(selectedData, selectedDataIds);
  }
}

完整示例

<template>
  <view class="content">
    <view class="title">多选插件演示</view>
    <view class="text-area">
      <text class="label">当前选中项目:</text>
      <text class="value" @tap="show = true">{{info || "请选择"}}</text>
    </view>
    <lp-multiple-select
        class="test"
        v-model="show"
        :list="list"
        height="50"
        :default-value="defaultSelected"
        label-name="text"
        value-name="id"
        title="今日晚餐"
        @confirm="confirm"
    >
      <template v-slot:tips>
        <view class="multiple-select__empty-tips">空空如也~~</view>
      </template>
    </lp-multiple-select>
  </view>
</template>

<script>
export default {
  data() {
    return {
      show: false, //是否显示 - 双向绑定
      list: [], //数据源
      defaultSelected: ["3", "5"], // 默认选中项
      info: "",
    };
  },
  onShow() {
    //模拟异步数据
    setTimeout(() => {
      this.list = [
        {
          text: "皮皮虾",
          id: "1"
        },
        {
          text: "小龙虾",
          id: "2",
          disabled: true // 禁用
        },
        {
          text: "大龙虾",
          id: "3"
        },
        {
          text: "石头蟹",
          id: "4"
        },
        {
          text: "兰花蟹",
          id: "5"
        },
        {
          text: "面包蟹",
          id: "6"
        },
        {
          text: "石斑鱼",
          id: "7"
        },
        {
          text: "鲫鱼",
          id: "8"
        },
        {
          text: "鲨鱼",
          id: "9"
        }
      ]
    }, 2000);
  },
  methods: {
    // 确定事件
    confirm(selectedData, selectedDataIds) {
      console.log(selectedData, selectedDataIds);
      this.info = selectedData.map(el => el.text).join();
    }
  }
};
</script>
<style scoped>
.title {
  font-size: 36rpx;
  color: #2088f9;
  margin-top: 20vh;
  text-align: center;
}
.text-area {
  width: 100%;
  margin-top: 5vh;
  display: flex;
  justify-content: center;
  font-size: 28rpx;
  box-sizing: border-box;
  padding: 20rpx;
}
.value {
  color: #2088f9;
}
.multiple-select__empty-tips {
  margin-top: 25%;
  text-align: center;
  font-size: 40rpx;
  color: #e2e2e2;
}
</style>

API

Props

属性说明类型默认值
v-model双向绑定控制弹出层显示Booleanfalse
list数据源Array[]
max多选时最大选择数Number99
cancel-text取消按钮文字String取消
confirm-text确认按钮文字String确认
title顶部中间的标题String-
label-name指定 list 中作为展示的 keyStringlabel
value-name指定 list 中作为 value 的 keyStringvalue
height弹出层高度,单位vhNumber|String30
z-index弹出时的z-index值Number|String10075
mask-close-able是否允许点击蒙层关闭Booleantrue
all-show是否显示全选Booleantrue
default-value默认选中值ArrayNumber|String[]
safe-area-inset-bottom是否开启底部安全区适配Booleantrue

Option Attributes

属性说明类型默认值
disabled是否禁用该选项booleanfalse

Slot

属性说明默认值
empty-tips自定义空数据时的提示暂无数据~

Events

事件名说明回调参数版本
confirm点击确定按钮,返回当前选择的值目前的选中选项Array与主键值Array-
cancel点击取消或者点击蒙层关闭时触发--

select搜索选择页组件

介绍

  1. 接口可配置

  2. 支持搜索、分页、多选、单选、返回结果、插槽自定义每一项布局、配置关键字段

  3. 兼容多平台、H5

平台差异说明

H5微信小程序支付宝小程序百度小程序头条小程序

使用方式

安装

npm install uni-multiple-select

引入

本组件内部使用了uview的一些组件:NavbarSearchCheckbox loadMoreEmptyButton,在引入上会引入uview,但是请放心,uni-app的easycom在打包的时候是按需引入的,您可以放心引入的组件库,发布打包时会自动剔除您没有使用的组件

1. 引入uView主JS库

在项目根目录中的main.js中,引入并使用uView的JS库,注意这两行要放在import Vue之后。

// main.js
import uView from "uview-ui";
Vue.use(uView);
2. 在引入uView的全局SCSS主题文件

在项目根目录的uni.scss中引入此文件。

/* uni.scss */
@import 'uview-ui/theme.scss';
3. 引入uView基础样式

注意!

App.vue首行的位置引入,注意给style标签加入lang="scss"属性

<style lang="scss">
	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
	@import "uview-ui/index.scss";
</style>
4. 配置easycom组件模式

pages.json里面配置如下

{
  "easycom": {
    "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue", // uview-ui
		"^lp-(.*)": "uni-multiple-select/components/lp-$1/index.vue" // uni-multiple-select
  },
  "pages": [
    //...
  ]
}

vue.config.js里面配置如下

module.exports = {
  transpileDependencies: [
    'uni-multiple-select', 'uview-ui'
  ]
}

基本使用

1.新建.vue,配置页面
{
	"easycom": {
		"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue",
		"^lp-(.*)": "cnpm-uni-select-wx/components/lp-$1/index.vue"
	},
	"pages": [
		{
			"path": "pages/searchSelectPage/index",
			"style": {
				"enablePullDownRefresh": true, // 开启下拉刷新
				"navigationStyle":"custom" // 取消默认的原生导航栏
			}
		},
	]
}
2.基础使用
<lp-search-select
    url="/resume/search.json"
    :isPullDownRefresh.sync="isPullDownRefresh"
    :isReachBottom.sync="isReachBottom"
    @confirm="confirm"
/>
<script>
export default {
  components: {},
  data() {
    return {
      isPullDownRefresh: false, // 触发了下拉
      isReachBottom: false // 触发了上拉触底
    }
  },
  methods: {
    // 确认事件
    confirm(selectedList, selectedIds) {
      console.log(selectedList, selectedIds);
    }
  },
	// 下拉刷新
  onPullDownRefresh() {
    this.isPullDownRefresh = true
  },
  // 上拉加载
  onReachBottom() {
    this.isReachBottom = true
  }
}
</script>

默认选中项(回显)

配置label、value对应的key名称

<lp-search-select
    url="/resume/search.json"
    :isPullDownRefresh.sync="isPullDownRefresh"
    :isReachBottom.sync="isReachBottom"
    valueName="resId"
    labelName="userName"
    @confirm="confirm"
/>

只搜索查看,没有底部按钮

html<lp-search-select
    url="/resume/search.json"
    :isPullDownRefresh.sync="isPullDownRefresh"
    :isReachBottom.sync="isReachBottom"
    :showBottomBtnGroups="false"
/>

完整示例

<template>
  <view class="page">
    <lp-search-select
      url="/resume/search.json"
      :isPullDownRefresh.sync="isPullDownRefresh"
      :isReachBottom.sync="isReachBottom"
      :loadText="loadText"
      valueName="resId"
      labelName="userName"
      mode="multiple"
      :searchAttrs="searchAttrs"
      :navBarAttrs="navBarAttrs"
      @confirm="confirm"
    >
      <!-- 插槽,用来修改每一项布局 -->
      <template v-slot:row="{ row }">
        <view class="list-wrap">
          <view class="item-line">
            {{ row.userName }}
          </view>
          <view class="item-line">
            {{ row.sexName }}
          </view>
        </view>
      </template>
    </lp-search-select>
  </view>
</template>

<script>
export default {
  data() {
    return {
      isPullDownRefresh: false, // 是否触发了下拉时间
      isReachBottom: false, // 是否触发了上拉事件
      loadText: {
        loadmore: '点击或上拉加载更多',
        loading: '正在加载',
        nomore: '没有更多了'
      },
      searchAttrs: {
        'input-align': 'center'
      },
      navBarAttrs: {
        backText: "返回"
      }
    }
  },
  methods: {
    confirm(selectedList, selectedIds) {
      console.log(selectedList, selectedIds);
    }
  },
  // 下拉刷新
  onPullDownRefresh() {
    this.isPullDownRefresh = true
  },
  // 上拉加载
  onReachBottom() {
    this.isReachBottom = true
  }
}
</script>

<style lang="scss" scoped>
.page {
  .list-wrap {
    height: auto;
    width: 100%;
    border-bottom: 2rpx dashed #cccccc;
  }
}
</style>

API

Props

属性说明类型默认值可选值
requesthttp request API,必填Functionuni.request-
url双向绑定控制弹出层显示,必填String--
isPullDownRefresh是否触发了下拉加载,必填Booleanfalsetrue
isReachBottom是否触发了触底事件,必填Booleanfalsetrue
loadText底部加载的文案Object{ loadmore: '轻轻上拉', loading: '努力加载中', nomore: '我是有底线的~'}-
label-name指定接口返回数据中作为展示的 keyStringlabel-
value-name指定接口返回数据中作为 value 的 keyStringvalue-
keyword顶部搜索关键字Stringkeyword-
pageSize每页搜索数量;建议调大点,该字段会影响页面触底,进而影响onReachBottom的触发Number|String20-
query其他默认查询参数Object--
mode切换单选、多选,默认多选Stringmultiplesingle、multiple
max多选时最大选择数String|Number999-
isOnlySearch只搜索查看,没有底部按钮和checkBoxBooleantruefalse
cancel-text取消按钮文字,必填Booleanfalse
confirm-text确认按钮文字String确认
default-selected默认选中值多选:ArrayNumber|String单选:Number|String[]-
checkboxColorcheckbox 颜色String#007aff
qs-stringify是否使用qs模块序列化参数Booleanfalsetrue
navBarAttrs导航栏属性Object见下方navBarAttrs
searchAttrs搜索组件属性Object见下方searchAttrs

Option Attributes

属性说明类型默认值
disabled是否禁用该选项booleanfalse

navBarAttrs

属性说明类型默认值可选值
height导航栏高度(不包括状态栏高度在内,内部自动加上),注意这里的单位是pxString | Number44-
backIconColor左边返回图标的颜色String#606266-
backIconName左边返回图标的名称,只能为uView自带的图标,1.5.5起由arrow-left调整为nav-backStringnav-backIcon
backIconSize左边返回图标的大小,单位rpxString | Number30-
backText返回图标右边的辅助提示文字String--
backTextStyle返回图标右边的辅助提示文字的样式,对象形式Object{ color: '#606266' }-
zIndex固定在顶部时的z-indexString | Number980-
isBack是否显示导航栏左边返回图标和辅助文字Booleantruefalse
background导航栏背景设置(APP和小程序上包括状态栏的颜色),见上方说明Object{ backgroundImage: 'linear-gradient(45deg, rgb(28, 187, 180), rgb(141, 198, 63))' }-
borderBottom导航栏底部是否显示下边框,如定义了较深的背景颜色,可取消此值Booleantruefalse
customBack自定义返回逻辑方法,如传入,点击返回按钮执行函数,否则正常返回上一页,注意模板中不需要写方法参数的括号Function--

searchAttrs

参数说明类型默认值可选值
shape搜索框形状,round-圆形,square-方形Stringroundsquare
bgColor搜索框背景颜色String#f2f2f2-
borderColor边框颜色,配置了颜色,才会有边框String--
placeholder占位文字内容String请输入关键字-
clearabled是否启用清除控件Booleantruefalse
focus是否自动获得焦点Booleanfalsetrue
showAction是否显示右侧控件(右侧的"搜索"按钮)Booleantruefalse
actionText右侧控件文字String搜索-
actionStyle右侧控件的样式,对象形式Object--
inputAlign输入框内容水平对齐方式Stringleftcenter / right
height输入框高度,单位rpxString | Number64-
searchIconColor搜索图标的颜色,默认同输入框字体颜色String--
color输入框字体颜色String#606266-
placeholderColorplaceholder的颜色String#909399-
margin组件与其他上下左右元素之间的距离,带单位的字符串形式,如"30rpx"、"30rpx 20rpx"等写法String--
maxlength输入框最大能输入的长度,-1为不限制长度String | Number-1-
inputStyle自定义输入框样式,对象形式Object--
searchIcon输入框左边的图标,可以为uView图标名称或图片路径StringsearchIcon

Slot

属性说明
row自定义每一项布局

Events

事件名说明回调参数版本
confirm点击确定按钮,返回当前选择的值多选:目前的选中选项Array与主键值Array单选:目前的选中选项Object-
cancel点击取消按钮--