Picker

选择器,基于 picker-viewpicker-view-column 实现,来自于 mpvue-picker

引入

import mpPicker from 'mpvue-weui/src/picker';
export default {
  components: {
    mpPicker,
  },
}

使用

<button type="default" @click="showMulLinkageTwoPicker">二级联动选择</button>
<mp-picker ref="mpPicker" :mode="mode" :deepLength=deepLength :pickerValueDefault="pickerValueDefault" @onChange="onChange" @onConfirm="onConfirm" @onCancel="onCancel" :pickerValueArray="pickerValueArray"></mp-picker>
export default {
  ...
  data() {
    return {
      mode: 'multiLinkageSelector',
      pickerValueArray: [
        {
          label: '飞机票',
          value: 100,
          children: [
            {
              label: '经济舱',
              value: 101
            },
            {
              label: '商务舱',
              value: 102
            }
          ]
        },
        {
          label: '火车票',
          value: 200,
          children: [
            {
              label: '卧铺',
              value: 210
            },
            {
              label: '坐票',
              value: 202
            },
            {
              label: '站票',
              value: 203
            }
          ]
        },
        {
          label: '汽车票',
          value: 300,
          children: [
            {
              label: '快班',
              value: 301
            },
            {
              label: '普通',
              value: 302
            }
          ]
        }
      ],
      pickerValueDefault: [1, 0]
    };
  },
  methods: {
    showMulLinkageTwoPicker() {
      this.$refs.mpPicker.show();
    },
    onConfirm(e) {
      console.log(e);
    },
    onChange(e) {
      console.log(e);
    },
    onCancel(e) {
      console.log(e);
    }
  }
};

初始化

在父组件中调用 mpPicker 实例中的 show 方法:

this.$refs.mpPicker.show();

API

参数 说明 类型 默认值
mode picker 组件类型 String selector
themeColor 主题颜色 String #1aad19
pickerValueArray picker 渲染数据 Array -
pickerValueDefault picker 默认选中值 Array []
deepLength 几级联动 Number 2

参数说明

mode

  • 可选值:
    • selector(单列)
    • timeSelector(时间选择)
    • multiSelector(多列)
    • multiLinkageSelector(级联)
  • 是否必填: 否

themeColor

  • 是否必填: 否

pickerValueArray

  • 是否必填: 是(当 mode 值为 timeSelector 不用填)

pickerValueDefault

  • 是否必填: 否 (当同一个组件使用多种 mode 来回切换使用时 pickerValueDefault 必填)

Event

事件名 说明 参数
@onChange 组件滚动时回调 返回选中的 label, value 和数组索引 index 的值
@onConfirm 组件点击确定时回调 返回选中的 label, value 和数组索引 index 的值
@onCancel 组件点击取消时回调 返回选中的 label, value 和数组索引 index 的值

相关数据结构说明

单列

点击展开单列数据结构
pickerValueArray: [
  {
    label: '住宿费',
    value: 1
  },
  {
    label: '活动费',
    value: 2
  },
  {
    label: '通讯费',
    value: 3
  },
  {
    label: '补助',
    value: 4
  }
],

多列

点击展开多列数据结构
pickerMulArray: [
  [
    { label: '中国', value: 1 },
    { label: '美国', value: 2 },
    { label: '日本', value: 3 },
    { label: '俄罗斯', value: 4 }
  ],
  [
    { label: '茶', value: 1 },
    { label: '咖啡', value: 2 },
    { label: '寿司', value: 3 },
    { label: '奶酪', value: 4 }
  ],
  [
    { label: '歼20', value: 1 },
    { label: 'F22', value: 2 },
    { label: '秋月级', value: 3 },
    { label: 'T50', value: 4 }
  ]
]

二级联动

点击展开二级联动数据结构
pickerValueArray:
[
  {
    label: '飞机票',
    value: 0,
    children: [{
      label: '经济舱',
      value: 1
    },
    {
      label: '商务舱',
      value: 2
    }
    ]
  },
  {
    label: '火车票',
    value: 1,
    children: [{
      label: '卧铺',
      value: 1
    },
    {
      label: '坐票',
      value: 2
    },
    {
      label: '站票',
      value: 3
    }
    ]
  },
  {
    label: '汽车票',
    value: 3,
    children: [{
      label: '快班',
      value: 1
    },
    {
      label: '普通',
      value: 2
    }
    ]
  }
]

三级联动

点击展开三级联动数据结构
pickerValueArray:
[
  {
    label: 'phone',
    value: 0,
    children: [
      {
        label: 'iphone',
        value: 1,
        children: [{
          label: 'iphoneX',
          value: 1
        },
        {
          label: 'iphone8',
          value: 2
        }, {
          label: 'iphone8 Plus',
          value: 3
        }]
      },
      {
        label: 'android',
        value: 1,
        children: [
          {
            label: 'vivo',
            value: 1
          },
          {
            label: '魅族',
            value: 2
          }, {
            label: '小米',
            value: 3
          }
        ]
      }
    ]
  },
  {
    label: 'PC',
    value: 0,
    children: [
      {
        label: 'mac',
        value: 1,
        children: [
          {
            label: 'macbook Pro',
            value: 1
          },
          {
            label: 'iMac',
            value: 2
          }, {
            label: 'mackbook',
            value: 3
          }, {
            label: 'mackbook air',
            value: 3
          }
        ]
      },
      {
        label: 'windows',
        value: 1,
        children: [
          {
            label: 'dell',
            value: 1
          },
          {
            label: 'surface',
            value: 2
          }, {
            label: 'thinkpad',
            value: 3
          }
        ]
      }
    ]
  }
]