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.

211 lines
4.3 KiB

import computeOffset from '../behaviors/computeOffset';
import zIndex from '../behaviors/zIndex';
import hover from '../behaviors/hover';
import validator from '../behaviors/validator';
Component({
/**
* 组件的属性列表
*/
behaviors: [computeOffset, zIndex, hover, validator],
externalClasses: [
'l-class', 'l-title-class', 'l-content-class', 'l-confirm-class', 'l-cancel-class', 'l-bg-class'
],
properties: {
// 显示与隐藏
show: {
type: Boolean,
value: false
},
// 类型 【 alert: 提示框, confirm: 确认框 】
type: {
type: String,
value: 'alert',
options: ['alert', 'confirm']
},
// 标题文字
title: {
type: String,
value: '提示'
},
// 是否显示标题
showTitle: {
type: Boolean,
value: true
},
// 内容
content: {
type: String,
value: ''
},
// 锁定
locked: {
type: Boolean,
value: true
},
// 确定按钮的文本
confirmText: {
type: String,
value: '确定'
},
// 确定按钮的颜色
confirmColor: {
type: String,
value: '#3683d6'
},
// 取消按钮的文本
cancelText: {
type: String,
value: '取消'
},
cancelColor: {
type: String,
value: '#45526b'
},
titleColor: String,
contentColor: {
type: String,
value: 'rgba(89,108,142,1)'
},
openApi: {
type: Boolean,
value: true
}
},
data: {
success: null,
fail: null,
},
/**
* 组件的初始数据
*/
attached() {
if (this.data.openApi) {
this.initDialog();
}
},
pageLifetimes: {
show() {
if (this.data.openApi) {
this.initDialog();
}
},
},
/**
* 组件的方法列表
*/
methods: {
initDialog() {
wx.lin = wx.lin || {};
wx.lin.showDialog = (options) => {
console.warn('wx.lin 方法已废弃,请使用开放函数代替 https://doc.mini.talelin.com/start/open-function.html');
this.linShow(options);
};
},
// 确定按钮
onConfirmTap() {
let detail = 'confirm';
let option = {bubbles: true, composed: true};
const {
success
} = this.data;
success && success({
confirm: true,
cancel: false,
errMsg: 'showDialog: success'
});
this.setData({
show: !this.data.show
});
this.triggerEvent('linconfirm', detail, option);
},
// 取消按钮
onCancelTap() {
let detail = 'cancel';
let option = {bubbles: true, composed: true};
const {
success
} = this.data;
success && success({
confirm: false,
cancel: true,
errMsg: 'showDialog: success'
});
this.setData({
show: !this.data.show
});
this.triggerEvent('lincancel', detail, option);
},
// 背景点击事件
onDialogTap() {
let detail = true;
let option = {bubbles: true, composed: true};
if (this.data.locked !== true) {
this.setData({
show: !this.data.show
});
}
this.triggerEvent('lintap', detail, option);
},
// ====================== 开放函数 ========================
/**
* 显示 Dialog
* @param options Dialog 所有属性
*/
linShow(options) {
const {
type = 'alert',
title = '提示',
showTitle = true,
content = '',
locked = true,
confirmText = '确定',
contentColor = 'rgba(89,108,142,1)',
cancelColor = '#45526b',
cancelText = '取消',
confirmColor = '#3683d6',
success = null,
fail = null,
} = options;
this.setData({
type,
title,
showTitle,
content,
locked,
confirmText,
cancelColor,
cancelText,
confirmColor,
contentColor,
show: true,
fail,
success
});
},
/**
* 隐藏 Dialog
*/
linHide() {
this.setData({
show: true
});
}
}
});