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