104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
'use strict';
|
||
|
||
var defaultData = require('./data');
|
||
|
||
function getDialogCtx(_ref) {
|
||
var selector = _ref.selector,
|
||
pageCtx = _ref.pageCtx;
|
||
|
||
var ctx = pageCtx;
|
||
if (!ctx) {
|
||
var pages = getCurrentPages();
|
||
ctx = pages[pages.length - 1];
|
||
}
|
||
return ctx.selectComponent(selector);
|
||
}
|
||
|
||
function getParsedOptions() {
|
||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||
|
||
return Object.assign({
|
||
// 自定义 btn 列表
|
||
// { type: 按钮类型,回调时以此作为区分依据,text: 按钮文案, color: 按钮文字颜色 }
|
||
buttons: []
|
||
}, defaultData, options);
|
||
}
|
||
|
||
// options 使用参数
|
||
// pageCtx 页面 page 上下文
|
||
function Dialog(options, pageCtx) {
|
||
var parsedOptions = getParsedOptions(options);
|
||
|
||
var dialogCtx = getDialogCtx({
|
||
selector: parsedOptions.selector,
|
||
pageCtx: pageCtx
|
||
});
|
||
|
||
if (!dialogCtx) {
|
||
console.error('无法找到对应的dialog组件,请于页面中注册并在 wxml 中声明 dialog 自定义组件');
|
||
return Promise.reject({ type: 'component error' });
|
||
}
|
||
|
||
// 处理默认按钮的展示
|
||
// 纵向排布确认按钮在上方
|
||
var _parsedOptions$button = parsedOptions.buttons,
|
||
buttons = _parsedOptions$button === undefined ? [] : _parsedOptions$button;
|
||
|
||
var showCustomBtns = false;
|
||
if (buttons.length === 0) {
|
||
if (parsedOptions.showConfirmButton) {
|
||
buttons.push({
|
||
type: 'confirm',
|
||
text: parsedOptions.confirmButtonText,
|
||
color: parsedOptions.confirmButtonColor
|
||
});
|
||
}
|
||
|
||
if (parsedOptions.showCancelButton) {
|
||
var cancelButton = {
|
||
type: 'cancel',
|
||
text: parsedOptions.cancelButtonText,
|
||
color: parsedOptions.cancelButtonColor
|
||
};
|
||
if (parsedOptions.buttonsShowVertical) {
|
||
buttons.push(cancelButton);
|
||
} else {
|
||
buttons.unshift(cancelButton);
|
||
}
|
||
}
|
||
} else {
|
||
showCustomBtns = true;
|
||
}
|
||
|
||
return new Promise(function (resolve, reject) {
|
||
dialogCtx.setData(Object.assign({}, parsedOptions, {
|
||
buttons: buttons,
|
||
showCustomBtns: showCustomBtns,
|
||
key: '' + new Date().getTime(),
|
||
show: true,
|
||
promiseFunc: { resolve: resolve, reject: reject },
|
||
openTypePromiseFunc: null
|
||
}));
|
||
});
|
||
}
|
||
|
||
Dialog.close = function (options, pageCtx) {
|
||
var parsedOptions = getParsedOptions(options);
|
||
|
||
var dialogCtx = getDialogCtx({
|
||
selector: parsedOptions.selector,
|
||
pageCtx: pageCtx
|
||
});
|
||
|
||
if (!dialogCtx) {
|
||
return;
|
||
}
|
||
|
||
dialogCtx.setData({
|
||
show: false,
|
||
promiseFunc: null,
|
||
openTypePromiseFunc: null
|
||
});
|
||
};
|
||
|
||
module.exports = Dialog; |