You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.9 KiB
75 lines
1.9 KiB
import baseComponent from '../helpers/baseComponent'
|
|
import classNames from '../helpers/classNames'
|
|
import { getSelectIndex } from '../popup-select/utils'
|
|
|
|
const defaults = {
|
|
prefixCls: 'wux-select',
|
|
value: '',
|
|
options: [],
|
|
multiple: false,
|
|
max: -1,
|
|
toolbar: {
|
|
title: '请选择',
|
|
cancelText: '取消',
|
|
confirmText: '确定',
|
|
},
|
|
onChange() {},
|
|
onConfirm() {},
|
|
onCancel() {},
|
|
}
|
|
|
|
function runCallbacks(method, values, vm) {
|
|
const { value } = values
|
|
const { options, multiple } = vm.data
|
|
const index = getSelectIndex(options, value, multiple)
|
|
if (typeof vm.fns[method] === 'function') {
|
|
vm.fns[method].call(vm, value, index, options)
|
|
}
|
|
}
|
|
|
|
baseComponent({
|
|
useFunc: true,
|
|
data: defaults,
|
|
methods: {
|
|
/**
|
|
* 打开
|
|
*/
|
|
open(opts = {}) {
|
|
const options = this.$$mergeOptionsAndBindMethods(Object.assign({}, defaults, opts, {
|
|
max: parseInt(opts.max),
|
|
}))
|
|
this.$$setData({ visible: true, ...options })
|
|
},
|
|
/**
|
|
* 关闭
|
|
*/
|
|
close(callback) {
|
|
this.select = this.select || this.selectComponent('#wux-popup-select')
|
|
this.select && this.select.close(callback)
|
|
},
|
|
/**
|
|
* 点击确定按钮时的回调函数
|
|
*/
|
|
onConfirm(e) {
|
|
return runCallbacks('onConfirm', e.detail, this)
|
|
},
|
|
/**
|
|
* 点击取消按钮时的回调函数
|
|
*/
|
|
onCancel(e) {
|
|
return runCallbacks('onCancel', e.detail, this)
|
|
},
|
|
/**
|
|
* 每列数据选择变化后的回调函数
|
|
*/
|
|
onValueChange(e) {
|
|
return runCallbacks('onChange', e.detail, this)
|
|
},
|
|
/**
|
|
* 当显隐状态变化时回调函数
|
|
*/
|
|
onVisibleChange(e) {
|
|
this.$$setData({ visible: e.detail.visible })
|
|
},
|
|
},
|
|
})
|
|
|