榆山数据端小程序
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.

76 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 })
},
},
})