# da-dropdown-vue2 一个基于 Vue2 的头部导航栏下拉弹窗组件,多平台兼容。 内容同步于 Vue3 版本,在此查看 ===> **[Vue3 版](https://ext.dcloud.net.cn/plugin?id=11840)** _与 Vue3 版本版本不同的是,此版本兼容更全面,比如 360 小程序、快应用等均支持_ ### 关于使用 可在右侧的`使用 HBuilderX 导入插件`或`下载示例项目ZIP`,示例项目已添加多个示例,方便快速上手。 可通过下方的示例及文档说明,进一步了解使用组件相关细节参数。 插件地址:https://ext.dcloud.net.cn/plugin?id=13062 ### 功能一览 1. 下拉列表(单选) 2. 点击常亮 3. 点击排序 4. 下拉筛选(单选按钮、多选按钮、滑动选择器) 5. 级联筛选(单选) 6. 日期筛选(日期快选、日期区间选择) 7. 顶部搜索 8. 自定插槽 ### 组件示例 ```jsx ``` ```js import DaDropdownVue2 from '@/components/da-dropdown-vue2/index.vue' export default { components: { DaDropdownVue2 }, data() { return { title: 'hello', dropdownMenuList: [ // 演示数据请看下方各模块说明或下载示例项目查看 // ... ], } }, methods: { handleConfirm(v) { console.log('handleConfirm ==>', v) }, handleClose(v) { console.log('handleClose ==>', v) }, handleOpen(v) { console.log('handleOpen ==>', v) }, }, } ``` ### 组件参数 | 属性 | 类型 | 默认值 | 必填 | 说明 | | :------------------- | :-------- | :-------- | :--- | :--------------------------------- | | v-model:dropdownMenu | `Array` | `[]` | 是 | 导航菜单数据 | | themeColor | `String` | `#007aff` | 否 | 主题颜色 | | textColor | `String` | `#333333` | 否 | 导航文字颜色 | | bgColor | `String` | `#ffffff` | 否 | 背景颜色,当固定在顶部时,此为必填 | | fixedTop | `Boolean` | `false` | 否 | 是否固定在顶部 | | fixedTopValue | `Number` | `0` | 否 | 固定在头部时的位置,单位 px | | duration | `Number` | `300` | 否 | 弹窗动画的过渡时间 | > 温馨提示:如果页面定义了 "navigationStyle": "custom" ,因此固定头部时需要额外获取状态栏高度,以免被异形屏头部覆盖,此时的 fixedTopValue 的作用就出来了,通过 fixedTopValue 自定义加减固定头部所处的位置。 ### 组件事件 | 事件名称 | 回调参数 | 说明 | | :------- | :------------------------- | :----------------------------------------------------------------- | | open | `(index) => void` | 打开弹窗时回调 | | close | `(index,menuList) => void` | 关闭弹窗时回调 | | confirm | `(value,data) => void` | 确定选择内容时回调,返回选择的数据,格式`{'菜单项prop值': '内容'}` | ### 组件方法 | 事件名称 | 回调参数 | 说明 | | :---------------- | :------------------------- | :-------------------------------------- | | openMenuItemPopup | `(index) => void` | 打开指定位置的菜单项弹窗 | | closeMenuPopup | `() => void` | 关闭菜单项弹窗 | | getMenuValue | `() => object` | 获取菜单存在的值 | | updateMenu | `(prop,value,key) => void` | 更新菜单项内容【参考示例7】 | | setMenuLoading | `(prop,state) => void` | 操作指定菜单项为加载中状态【参考示例7】 | | getMenuIndex | `(prop) => number` | 获取菜单项所在索引位置 | | getMenuList | `() => array` | 获取当前菜单列表数据【参考示例6】 | ### 组件菜单项 #### dropdownMenu 基础参数 | 属性 | 类型 | 默认值 | 必填 | 说明 | | :---------- | :--------- | :----- | :--- | :--------------------------------------------------------------- | | title | `String` | - | 是 | 菜单名称 | | prop | `String` | - | 是 | 菜单 prop 值,**菜单项的 prop 是唯一的** | | type | `String` | - | 是 | 菜单类型,参考下方类型说明 | | syncDataFn | `Function` | - | 否 | 异步函数返回子项数据,优先级大于 options | | syncDataKey | `String` | - | 否 | 异步数据不是根数据时需要。支持嵌套,如:`data.list`【参考示例7】 | 除上方基础参数以外,不同的菜单项(type)会有额外的配置参数 **type 说明** **cell** 下拉列表 **click** 点击 **sort** 排序 **filter** 复杂筛选 **picker** 级联 **daterange** 日期范围 **search** 搜索框(菜单项 type 唯一) **slot** 弹窗插槽 #### 菜单项 - 下拉列表(cell) | 属性 | 类型 | 默认值 | 必填 | 说明 | | :------- | :----------------- | :----------------------------------------------------- | :--- | :----------------------------------------- | | value | `Number`\|`String` | - | 否 | 默认值,和`options`的 value 必须保持同类型 | | showAll | `Boolean` | `false` | 否 | 是否显示 “不限” 项 | | showIcon | `Boolean` | `false` | 否 | 是否在选中时显示勾选图标 | | field | `Object` | `{ label: 'label', value: 'value', suffix: 'suffix' }` | 否 | 列表子项数据对应内容字段 | | options | `Array` | `[]` | 否 | 下拉列表子项数据 | ```js // 简单示例 const dropdownMenuList = [ { title: '下拉', type: 'cell', prop: 'god1', showAll: true, showIcon: true, // value: '2', // 默认内容2 options: [ { label: '下拉列表项1', value: '1', suffix: '副标题' }, { label: '下拉列表项2', value: '2' }, { label: '下拉列表项3', value: '3' }, ], }, ] ``` #### 菜单项 - 高亮(click) | 属性 | 类型 | 默认值 | 必填 | 说明 | | :---- | :-------- | :----- | :--- | :-------------------------------- | | value | `Boolean` | - | 否 | 默认值,true 选中、false 取消选中 | ```js // 简单示例 const dropdownMenuList = [ { title: '点击', type: 'click', prop: 'god2', // value: true, // 默认选中 }, ] ``` #### 菜单项 - 排序(sort) | 属性 | 类型 | 默认值 | 必填 | 说明 | | :---- | :------------ | :----- | :--- | :-------------------------- | | value | `asc`\|`desc` | - | 否 | 默认值,asc 升序、desc 倒序 | ```js // 简单示例 const dropdownMenuList = [ { title: '排序', type: 'sort', prop: 'god3', // value: 'asc', // 默认升序 }, ] ``` #### 菜单项 - 筛选(filter) | 属性 | 类型 | 默认值 | 必填 | 说明 | | :------ | :------- | :----- | :--- | :------------------------------------------- | | value | `Object` | - | 否 | 默认值,格式`{ prop1: '值1', prop2: '值2' }` | | options | `Array` | `[]` | 否 | 筛选子项数据,**说明见下** | ##### filter -> options 参数说明 | 属性 | 类型 | 必填 | 说明 | | :------------- | :---------------------------- | :--- | :-------------------------------------------------------------------------------------------- | | title | `String` | 是 | 筛选项的子项标题 | | type | `radio`\|`checkbox`\|`slider` | 是 | 筛选项的子项类型,可选 radio 单选按钮、checkbox 多选按钮、slider 滑动选择器 | | prop | `String` | 是 | 筛选项的子项 prop,**注意保持子项 prop 唯一** | | componentProps | `Object` | 否 | 筛选项的对应的组件配置,[slider 组件配置](https://uniapp.dcloud.net.cn/component/slider.html) | | options | `Array` | 否 | 筛选子项的类型对应的数据 | ```js // 简单示例 const dropdownMenuList = [ { title: '筛选', type: 'filter', prop: 'god4', // 默认选中单选2、多选2、3、滑动30 // value: { ft1: '2', ft2: ['2', '3'], ft3: 30 }, options: [ { title: '单选', type: 'radio', prop: 'ft1', options: [ { label: '单选1', value: '1' }, { label: '单选2', value: '2' } ], }, { title: '多选', type: 'checkbox', prop: 'ft2', options: [ { label: '多选1', value: '1' }, { label: '多选2', value: '2' } ], }, { title: '滑块', type: 'slider', prop: 'ft3', componentProps: { min: 0, max: 100, step: 1, showValue: true, }, }, ], }, ] ``` #### 菜单项 - 级联(picker) | 属性 | 类型 | 默认值 | 必填 | 说明 | | :---------- | :--------- | :--------------------------------------------------------- | :--- | :--------------------------------------------------------------- | | value | `Array` | - | 否 | 默认值,格式`['一级value', '二级value']` | | showAll | `Boolean` | `false` | 否 | 是否显示 “不限” 项 | | showIcon | `Boolean` | `false` | 否 | 是否在选中末级时显示勾选图标 | | field | `Object` | `{ label: 'label', value: 'value', children: 'children' }` | 否 | 级联子项数据对应内容字段 | | options | `Array` | `[]` | 否 | 级联子项数据 | | syncDataFn | `Function` | - | 否 | 异步函数返回级联子项数据,优先级大于 options | | syncDataKey | `String` | - | 否 | 异步数据不是根数据时需要。支持嵌套,如:`data.list`【参考示例7】 | ```js // 简单示例 const dropdownMenuList = [ { title: '级联选择', type: 'picker', prop: 'god5', showAll: true, showIcon: true, // showAll 为true时相当于在options第一的位置插入“不限”项 // { label: '不限', value: '-9999' }, field: { label: 'label', value: 'value', children: 'children', }, // value: ['2', '22'], // 默认选中 级联X22 options: [ { label: '级联X1', value: '1', children: [ { label: '级联X11', value: '11' }, { label: '级联X12', value: '12' }, ], }, { label: '级联X2', value: '2', children: [ { label: '级联X21', value: '21' }, { label: '级联X22', value: '22' }, ], }, ], }, ] ``` #### 菜单项 - 日期(daterange) | 属性 | 类型 | 默认值 | 必填 | 说明 | | :-------- | :-------- | :----- | :--- | :--------------------------------------------------- | | value | `Object` | - | 否 | 默认值,格式`{ start: '开始日期', end: '结束日期' }` | | showQuick | `Boolean` | `true` | 否 | 是否显示日期快选 | ```js // 简单示例 const dropdownMenuList = [ { title: '日期范围', type: 'daterange', prop: 'god6', // 默认选中 2022-01-01到2022-02-01 // value: { start: '2022-01-01', end: '2022-02-01' }, }, ] ``` #### 菜单项 - 顶部搜索框(search) 当存在此类型时,头部将会展示搜索框,**注意:此类型唯一** | 属性 | 类型 | 默认值 | 必填 | 说明 | | :---- | :------- | :----- | :--- | :----- | | value | `String` | - | 否 | 默认值 | ```js // 简单示例 const dropdownMenuList = [ { title: '搜索', type: 'search', prop: 'god0', }, ] ``` #### 菜单项 - 拓展插槽(slot1、slot2、slot3、slot4、slot5) 拓展插槽有 5 个,足以应付业务需求了,类型名称为`slot1`、`slot2`、`slot3`、`slot4`、`slot5`,这是固定的类型值 | 属性 | 类型 | 默认值 | 必填 | 说明 | | :---- | :------- | :----- | :--- | :----- | | value | `String` | - | 否 | 默认值 | ```jsx // 简单示例 ``` ```js const dropdownMenuList = [ { title: '插槽1', type: 'slot1', prop: 'god1', }, { title: '插槽2', type: 'slot2', prop: 'god2', }, { title: '插槽3', type: 'slot3', prop: 'god3', }, { title: '插槽4', type: 'slot4', prop: 'god4', }, { title: '插槽5', type: 'slot5', prop: 'god5', }, ] ``` ### 组件版本 v2.2.1 ### 差异化 已通过测试 > - H5 页面 > - 微信小程序 > - 支付宝、钉钉小程序 > - 字节跳动、抖音、今日头条小程序 > - 百度小程序 > - 飞书小程序 > - QQ 小程序 > - 京东小程序 > - 快应用 > - 360 小程序 未测试 > - 快手小程序由于非企业用户暂无演示 ### 开发组 [@CRLANG](https://crlang.com)