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

134 lines
4.3 KiB

import baseComponent from '../helpers/baseComponent'
import classNames from '../helpers/classNames'
const defaults = {
prefixCls: 'wux-actionsheet',
theme: 'ios',
className: '',
titleText: '',
buttons: [],
buttonClicked() {},
cancelText: '取消',
cancel() {},
// destructiveText: '删除',
// destructiveButtonClicked() {},
}
baseComponent({
useFunc: true,
data: defaults,
computed: {
classes: ['prefixCls, theme, buttons, cancelText', function(prefixCls, theme, buttons, cancelText) {
const wrap = classNames(prefixCls)
const popup = `${prefixCls}__popup`
const content = classNames(`${prefixCls}__content`, {
[`${prefixCls}__content--theme-${theme}`]: theme,
[`${prefixCls}__content--has-cancel`]: cancelText,
})
const options = classNames(`${prefixCls}__group`, {
[`${prefixCls}__group--options`]: true,
})
const title = `${prefixCls}__title`
const destructive = classNames(`${prefixCls}__button`, {
[`${prefixCls}__button--destructive`]: true,
})
const button = buttons.map((button) => {
const wrap = classNames(`${prefixCls}__button`, {
[`${prefixCls}__button--option`]: true,
[`${prefixCls}__button--disabled`]: button.disabled,
[`${button.className}`]: button.className,
})
const hover = button.hoverClass && button.hoverClass !== 'default' ? button.hoverClass : `${prefixCls}__button--hover`
return {
wrap,
hover,
}
})
const icon = `${prefixCls}__icon`
const text = `${prefixCls}__text`
const group = classNames(`${prefixCls}__group`, {
[`${prefixCls}__group--cancel`]: true,
})
const cancel = classNames(`${prefixCls}__button`, {
[`${prefixCls}__button--cancel`]: true,
})
const hover = `${prefixCls}__button--hover`
return {
wrap,
popup,
content,
options,
title,
button,
icon,
text,
destructive,
group,
cancel,
hover,
}
}],
},
methods: {
/**
* 显示
*/
showSheet(opts = {}) {
const options = this.$$mergeOptionsAndBindMethods(Object.assign({}, defaults, opts))
this.removed = false
this.$$setData({ in: true, ...options })
return this.cancel.bind(this)
},
/**
* 隐藏
*/
removeSheet(callback) {
if (this.removed) return false
this.removed = true
this.$$setData({ in: false })
if (typeof callback === 'function') {
callback(this.data.buttons)
}
},
/**
* 按钮点击事件
*/
buttonClicked(e) {
const { index } = e.currentTarget.dataset
if (this.fns.buttonClicked(index, this.data.buttons[index]) === true) {
this.removeSheet()
}
},
/**
* 删除按钮点击事件
*/
destructiveButtonClicked() {
if (this.fns.destructiveButtonClicked() === true) {
this.removeSheet()
}
},
/**
* 取消按钮点击事件
*/
cancel() {
this.removeSheet(this.fns.cancel)
},
bindgetuserinfo(e) {
this.triggerEvent('getuserinfo', {...e.detail, ...e.currentTarget.dataset })
},
bindcontact(e) {
this.triggerEvent('contact', {...e.detail, ...e.currentTarget.dataset })
},
bindgetphonenumber(e) {
this.triggerEvent('getphonenumber', {...e.detail, ...e.currentTarget.dataset })
},
bindopensetting(e) {
this.triggerEvent('opensetting', {...e.detail, ...e.currentTarget.dataset })
},
onError(e) {
this.triggerEvent('error', {...e.detail, ...e.currentTarget.dataset })
},
},
})