WebApp【公共组件库】@前端(For Git Submodule)
chensiAb
2024-05-16 0809fce7c43a94c40f0b355e359221477facc51b
bases/BridgeCenterBase.js
@@ -26,15 +26,28 @@
        });
    }
    /**
     * 获取当前页面
     * @return {Taro.Page}
     */
    $getCurrentPage() {
        const pages = Taro.getCurrentPages();
        return pages[pages.length - 1];
    }
    /**
     * 获取当前页面路径
     * @return {String}
     */
    $getCurrentPagePath() {
        return this.$getCurrentPage().path.split('?')[0];
    }
    /**
     * 判断地址是否为当前页面
     * @param {String} url
     * @return {Taro.Page|null}
     */
    $isCurrentPage(url) {
        const pages = Taro.getCurrentPages();
        const curPage = pages[pages.length - 1];
@@ -45,32 +58,62 @@
        }
    }
    _checkPage(url, callback) {
    /**
     * 判断当前页面是否在列表中
     * @param {Array} allows=[]
     * @return {boolean}
     */
    $isCurPageInside(allows = []) {
        const url = this.$getCurrentPagePath();
        return allows.indexOf(url) >= 0;
    }
    _waitCurPage(url, callback) {
        let curPage = this.$isCurrentPage(url);
        if (curPage) {
            callback(curPage);
        } else {
            setTimeout(() => {
                this._checkPage(url, callback);
                this._waitCurPage(url, callback);
            }, 100);
        }
    }
    /**
     * 打开指定页面
     * @param {String} url
     * @param {Function} callback
     */
    $openPage(url, callback) {
        const curPage = this.$isCurrentPage(url);
        // 需打开的是当前页面
        if (curPage) {
            callback(curPage);
        } else {
            Taro.navigateTo({
                url,
                success: () => {
                    this._checkPage(url, callback);
                },
            });
            Taro.navigateTo({ url });
            setTimeout(() => {
                this._waitCurPage(url, callback);
            }, 100);
        }
    }
    /**
     * 当前页下发通讯
     * @param {String} method
     * @param {Object} res
     * @param {Function} [callback]
     */
    $curPageBridge(method, res, callback) {
        this.$pageBridge(this.$getCurrentPage(), method, res, callback);
    }
    /**
     * 对某个页面下发通知
     * @param {Taro.Page} page
     * @param {String} method
     * @param {Object} res
     * @param {Function} [callback]
     */
    $pageBridge(page, method, res, callback) {
        if (!page.$component || !page.$component.$onBridge) {
            return;