148 lines
4.1 KiB
JavaScript
148 lines
4.1 KiB
JavaScript
|
'use strict';
|
|||
|
|
|||
|
var _f = function _f() {};
|
|||
|
var needResponseOpenTypes = ['getUserInfo', 'getPhoneNumber', 'openSetting'];
|
|||
|
|
|||
|
Component({
|
|||
|
properties: {},
|
|||
|
|
|||
|
data: {
|
|||
|
// 标题
|
|||
|
title: '',
|
|||
|
// 自定义 btn 列表
|
|||
|
// { type: 按钮类型,回调时以此作为区分依据,text: 按钮文案, color: 按钮文字颜色, openType: 微信开放能力 }
|
|||
|
buttons: [],
|
|||
|
// 内容
|
|||
|
message: ' ',
|
|||
|
// 选择节点
|
|||
|
selector: '#zan-dialog',
|
|||
|
// 是否允许滚动
|
|||
|
isScroll: false,
|
|||
|
// 按钮是否展示为纵向
|
|||
|
buttonsShowVertical: false,
|
|||
|
// 是否展示确定
|
|||
|
showConfirmButton: true,
|
|||
|
// 确认按钮文案
|
|||
|
confirmButtonText: '确定',
|
|||
|
// 确认按钮颜色
|
|||
|
confirmButtonColor: '#3CC51F',
|
|||
|
// 是否展示取消
|
|||
|
showCancelButton: false,
|
|||
|
// 取消按钮文案
|
|||
|
cancelButtonText: '取消',
|
|||
|
// 取消按钮颜色
|
|||
|
cancelButtonColor: '#333',
|
|||
|
key: '',
|
|||
|
autoClose: true,
|
|||
|
show: false,
|
|||
|
showCustomBtns: false,
|
|||
|
promiseFunc: {},
|
|||
|
openTypePromiseFunc: {}
|
|||
|
},
|
|||
|
|
|||
|
methods: {
|
|||
|
handleButtonClick: function handleButtonClick(e) {
|
|||
|
var _this = this;
|
|||
|
|
|||
|
var _e$currentTarget = e.currentTarget,
|
|||
|
currentTarget = _e$currentTarget === undefined ? {} : _e$currentTarget;
|
|||
|
var _currentTarget$datase = currentTarget.dataset,
|
|||
|
dataset = _currentTarget$datase === undefined ? {} : _currentTarget$datase;
|
|||
|
|
|||
|
// 获取当次弹出框的信息
|
|||
|
|
|||
|
var _ref = this.data.promiseFunc || {},
|
|||
|
_ref$resolve = _ref.resolve,
|
|||
|
resolve = _ref$resolve === undefined ? _f : _ref$resolve,
|
|||
|
_ref$reject = _ref.reject,
|
|||
|
reject = _ref$reject === undefined ? _f : _ref$reject;
|
|||
|
|
|||
|
// 重置展示
|
|||
|
|
|||
|
|
|||
|
if (this.data.autoClose) {
|
|||
|
this.setData({
|
|||
|
show: false
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// 自定义按钮,全部 resolve 形式返回,根据 type 区分点击按钮
|
|||
|
if (this.data.showCustomBtns) {
|
|||
|
var isNeedOpenDataButton = needResponseOpenTypes.indexOf(dataset.openType) > -1;
|
|||
|
var resolveData = {
|
|||
|
type: dataset.type
|
|||
|
};
|
|||
|
// 如果需要 openData,就额外返回一个 promise,用于后续 open 数据返回
|
|||
|
if (isNeedOpenDataButton) {
|
|||
|
resolveData.openDataPromise = new Promise(function(resolve, reject) {
|
|||
|
_this.setData({
|
|||
|
openTypePromiseFunc: {
|
|||
|
resolve: resolve,
|
|||
|
reject: reject
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
resolveData.hasOpenDataPromise = true;
|
|||
|
}
|
|||
|
resolve(resolveData);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// 默认按钮,确认为 resolve,取消为 reject
|
|||
|
if (dataset.type === 'confirm') {
|
|||
|
resolve({
|
|||
|
type: 'confirm'
|
|||
|
});
|
|||
|
} else {
|
|||
|
reject({
|
|||
|
type: 'cancel'
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
this.setData({
|
|||
|
promiseFunc: {}
|
|||
|
});
|
|||
|
},
|
|||
|
|
|||
|
|
|||
|
// 以下为处理微信按钮开放能力的逻辑
|
|||
|
handleUserInfoResponse: function handleUserInfoResponse(_ref2) {
|
|||
|
var detail = _ref2.detail;
|
|||
|
|
|||
|
this.__handleOpenDataResponse({
|
|||
|
type: detail.errMsg === 'getUserInfo:ok' ? 'resolve' : 'reject',
|
|||
|
data: detail
|
|||
|
});
|
|||
|
},
|
|||
|
handlePhoneResponse: function handlePhoneResponse(_ref3) {
|
|||
|
var detail = _ref3.detail;
|
|||
|
|
|||
|
this.__handleOpenDataResponse({
|
|||
|
type: detail.errMsg === 'getPhoneNumber:ok' ? 'resolve' : 'reject',
|
|||
|
data: detail
|
|||
|
});
|
|||
|
},
|
|||
|
handleOpenSettingResponse: function handleOpenSettingResponse(_ref4) {
|
|||
|
var detail = _ref4.detail;
|
|||
|
|
|||
|
this.__handleOpenDataResponse({
|
|||
|
type: detail.errMsg === 'openSetting:ok' ? 'resolve' : 'reject',
|
|||
|
data: detail
|
|||
|
});
|
|||
|
},
|
|||
|
__handleOpenDataResponse: function __handleOpenDataResponse(_ref5) {
|
|||
|
var _ref5$type = _ref5.type,
|
|||
|
type = _ref5$type === undefined ? 'resolve' : _ref5$type,
|
|||
|
_ref5$data = _ref5.data,
|
|||
|
data = _ref5$data === undefined ? {} : _ref5$data;
|
|||
|
|
|||
|
var promiseFuncs = this.data.openTypePromiseFunc || {};
|
|||
|
var responseFunc = promiseFuncs[type] || _f;
|
|||
|
|
|||
|
responseFunc(data);
|
|||
|
this.setData({
|
|||
|
openTypePromiseFunc: null
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|