UNPKG

@xmini/x-mini

Version:

封装小程序

280 lines (222 loc) 10.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _pluginBase = _interopRequireDefault(require("../core/plugin-base")); var _index = require("../utils/index"); var _index2 = _interopRequireDefault(require("../index")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } // function toMap(arr = []) { // return arr.reduce((obj, item) => { // obj[item] = true; // return obj; // }, {}) // } /** * 小程序业务渠道&参数处理(如果扩展可以支持业务之外的参数处理) * 支持业务参数配置 spm channel_id 等,可新增 * 支持参数的 parse stringify merge 操作 * * @class Plugin * @extends {PluginBase} */ var Plugin = /*#__PURE__*/ function (_PluginBase) { _inherits(Plugin, _PluginBase); function Plugin() { var _this; var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, Plugin); _this = _possibleConstructorReturn(this, _getPrototypeOf(Plugin).call(this, config)); _defineProperty(_assertThisInitialized(_this), "name", 'route'); _defineProperty(_assertThisInitialized(_this), "events", {}); _defineProperty(_assertThisInitialized(_this), "methods", { getPages: 'getPages' // setChannel: 'setChannel', // getChannelFilter: 'getChannelFilter', }); _this.initPages(config.appConfig); return _this; } _createClass(Plugin, [{ key: "pagesMap", value: function pagesMap() { var pageArr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return pageArr.reduce(function (obj, item) { var page = item.split('/').reverse()[0] || ''; /* eslint no-param-reassign: 0 */ obj[page] = "".concat(item); return obj; }, {}); } }, { key: "pagesObj", value: function pagesObj(allPages, tabPages) { return { allPages: this.pagesMap(allPages), tabPages: this.pagesMap(tabPages), defaultPage: allPages[0] && allPages[0].split('/').reverse()[0] || '' }; } }, { key: "getPages", value: function getPages() { return { allPages: _objectSpread({}, this.pages.allPages), tabPages: _objectSpread({}, this.pages.tabPages), default: this.pages.defaultPage }; } // const appConfig = typeof __wxConfig !== 'undefined' ? __wxConfig : require('/app.json'); }, { key: "initPages", value: function initPages() { var appConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _appConfig$pages = appConfig.pages, pages = _appConfig$pages === void 0 ? [] : _appConfig$pages, _appConfig$tabBar = appConfig.tabBar, tabBar = _appConfig$tabBar === void 0 ? {} : _appConfig$tabBar; var tabBarList = tabBar.items || tabBar.list || []; var tabPages = tabBarList.map(function (item) { return item.pagePath; }); this.pages = this.pagesObj(pages, tabPages); return this.pages; } }, { key: "urlParse", value: function urlParse() { var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var query = _objectSpread({}, params); var urlArr = url ? url.split('?') : []; var pageName = urlArr[0]; if (!pageName) return; var _this$getPages = this.getPages(), allPages = _this$getPages.allPages, tabPages = _this$getPages.tabPages; var pagePath; var urlType = ''; if (/^miniapp/.test(url)) { urlType = 'miniapp'; pagePath = pageName.replace('miniapp://', ''); } pagePath = allPages[pageName]; query = !urlArr[1] ? (0, _index.stringify)(query) : [(0, _index.stringify)(query), urlArr[1]].join('&'); if (!pagePath) { if (url === '/') { pagePath = ''; } } query = query ? "?".concat(query) : ''; return { isTabPage: !!tabPages[pageName], urlType: urlType, pageName: pageName, pageQuery: query, pagePath: "".concat(pagePath), pageUrl: "".concat(pagePath).concat(query) }; } }, { key: "goPage", value: function goPage(url) { var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!url) return; var me = _index2.default.me; var replace = query.replace, back = query.back, appid = query.appid; // TODO: deal channel var page = url; var type = ''; var _ref = this.urlParse(url, query) || {}, pagePath = _ref.pagePath, pageUrl = _ref.pageUrl, isTabPage = _ref.isTabPage; type = replace ? 'replace' : back ? 'back' : ''; if (/^miniapp/.test(url)) { var urlArr = url ? url.split('?') : []; url = urlArr[0].replace('miniapp://', ''); // appid, 跳转到的小程序appId // path, 打开的页面路径,如果为空则打开首页 // extraData, 需要传递给目标小程序的数据 var miniParams = { appid: appid, extraData: query, success: function success(res) {}, fail: function fail(res) {}, complete: function complete(res) {} }; if (url) { miniParams.path = url; } this.goMiniUrl({ path: url.replace('miniapp://', '/') }); me.navigateToMiniProgram(miniParams); return; } if (!pagePath) return; page = { url: "/".concat(pageUrl) }; if (isTabPage) { type = 'switch'; page = { url: "/".concat(pagePath) }; } delete query.replace; delete query.back; // 上传formid事件没办法触发,需要一点时间延迟 // 不支持 async // await sleep(100); switch (type) { case 'replace': me.redirectTo(page); break; case 'back': me.navigateBack(page); break; case 'switch': // url 不支持 queryString me.switchTab(page); break; default: // navigateTo, redirectTo 只能打开非 tabBar 页面。 // switchTab 只能打开 tabBar 页面。 if (getCurrentPages().length === 10) { me.redirectTo(page); } else { me.navigateTo(page); } break; } } }, { key: "install", value: function install(xm) { var _this2 = this; xm.addMixin('page', { $forward: function $forward(url, query) { _this2.goPage(url, query); }, back: function back() {} }); } }]); return Plugin; }(_pluginBase.default); var _default = Plugin; exports.default = _default; module.exports = exports.default;