index.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. 'use strict';
  2. var _f = function _f() {};
  3. var needResponseOpenTypes = ['getUserInfo', 'getPhoneNumber', 'openSetting'];
  4. Component({
  5. properties: {},
  6. data: {
  7. // 标题
  8. title: '',
  9. // 自定义 btn 列表
  10. // { type: 按钮类型,回调时以此作为区分依据,text: 按钮文案, color: 按钮文字颜色, openType: 微信开放能力 }
  11. buttons: [],
  12. // 内容
  13. message: ' ',
  14. // 选择节点
  15. selector: '#zan-dialog',
  16. // 是否允许滚动
  17. isScroll: false,
  18. // 按钮是否展示为纵向
  19. buttonsShowVertical: false,
  20. // 是否展示确定
  21. showConfirmButton: true,
  22. // 确认按钮文案
  23. confirmButtonText: '确定',
  24. // 确认按钮颜色
  25. confirmButtonColor: '#3CC51F',
  26. // 是否展示取消
  27. showCancelButton: false,
  28. // 取消按钮文案
  29. cancelButtonText: '取消',
  30. // 取消按钮颜色
  31. cancelButtonColor: '#333',
  32. key: '',
  33. autoClose: true,
  34. show: false,
  35. showCustomBtns: false,
  36. promiseFunc: {},
  37. openTypePromiseFunc: {}
  38. },
  39. methods: {
  40. handleButtonClick: function handleButtonClick(e) {
  41. var _this = this;
  42. var _e$currentTarget = e.currentTarget,
  43. currentTarget = _e$currentTarget === undefined ? {} : _e$currentTarget;
  44. var _currentTarget$datase = currentTarget.dataset,
  45. dataset = _currentTarget$datase === undefined ? {} : _currentTarget$datase;
  46. // 获取当次弹出框的信息
  47. var _ref = this.data.promiseFunc || {},
  48. _ref$resolve = _ref.resolve,
  49. resolve = _ref$resolve === undefined ? _f : _ref$resolve,
  50. _ref$reject = _ref.reject,
  51. reject = _ref$reject === undefined ? _f : _ref$reject;
  52. // 重置展示
  53. if (this.data.autoClose) {
  54. this.setData({
  55. show: false
  56. });
  57. }
  58. // 自定义按钮,全部 resolve 形式返回,根据 type 区分点击按钮
  59. if (this.data.showCustomBtns) {
  60. var isNeedOpenDataButton = needResponseOpenTypes.indexOf(dataset.openType) > -1;
  61. var resolveData = {
  62. type: dataset.type
  63. };
  64. // 如果需要 openData,就额外返回一个 promise,用于后续 open 数据返回
  65. if (isNeedOpenDataButton) {
  66. resolveData.openDataPromise = new Promise(function(resolve, reject) {
  67. _this.setData({
  68. openTypePromiseFunc: {
  69. resolve: resolve,
  70. reject: reject
  71. }
  72. });
  73. });
  74. resolveData.hasOpenDataPromise = true;
  75. }
  76. resolve(resolveData);
  77. return;
  78. }
  79. // 默认按钮,确认为 resolve,取消为 reject
  80. if (dataset.type === 'confirm') {
  81. resolve({
  82. type: 'confirm'
  83. });
  84. } else {
  85. reject({
  86. type: 'cancel'
  87. });
  88. }
  89. this.setData({
  90. promiseFunc: {}
  91. });
  92. },
  93. // 以下为处理微信按钮开放能力的逻辑
  94. handleUserInfoResponse: function handleUserInfoResponse(_ref2) {
  95. var detail = _ref2.detail;
  96. this.__handleOpenDataResponse({
  97. type: detail.errMsg === 'getUserInfo:ok' ? 'resolve' : 'reject',
  98. data: detail
  99. });
  100. },
  101. handlePhoneResponse: function handlePhoneResponse(_ref3) {
  102. var detail = _ref3.detail;
  103. this.__handleOpenDataResponse({
  104. type: detail.errMsg === 'getPhoneNumber:ok' ? 'resolve' : 'reject',
  105. data: detail
  106. });
  107. },
  108. handleOpenSettingResponse: function handleOpenSettingResponse(_ref4) {
  109. var detail = _ref4.detail;
  110. this.__handleOpenDataResponse({
  111. type: detail.errMsg === 'openSetting:ok' ? 'resolve' : 'reject',
  112. data: detail
  113. });
  114. },
  115. __handleOpenDataResponse: function __handleOpenDataResponse(_ref5) {
  116. var _ref5$type = _ref5.type,
  117. type = _ref5$type === undefined ? 'resolve' : _ref5$type,
  118. _ref5$data = _ref5.data,
  119. data = _ref5$data === undefined ? {} : _ref5$data;
  120. var promiseFuncs = this.data.openTypePromiseFunc || {};
  121. var responseFunc = promiseFuncs[type] || _f;
  122. responseFunc(data);
  123. this.setData({
  124. openTypePromiseFunc: null
  125. });
  126. }
  127. }
  128. });