WebApp【公共组件库】@前端(For Git Submodule)
Tevin
2022-03-24 d96e8edbe496bde2875c75864a39324b1d8e5b70
bases/Pilot.js
@@ -3,6 +3,7 @@
 * @author Tevin
 */
import Taro, { getCurrentInstance, getCurrentPages } from '@tarojs/taro';
import { Fetcher } from './Fetcher';
import { Tools } from '@components/common/Tools';
import project from '@project';
@@ -52,9 +53,78 @@
                options.methods[name] = this[name];
            }
        });
        this._bindTaroPage(options);
        return options;
    }
    _bindTaroPage(options) {
        // 绑定页面实例到Page
        const { created, beforeDestroy, onMessage, onBridge } = options;
        const option2 = {
            created() {
                const instance = getCurrentInstance();
                instance.page.$component = this;
                // 绑定方法到页面实例
                this.$poster = Pilot.createPoster(this);
                this.$onMessage = onMessage || (() => null);
                this.$onBridge = onBridge || (() => null);
                // 实际生命周期回调
                created && created.call(this);
            },
            beforeDestroy() {
                const instance = getCurrentInstance();
                delete instance.page.$component;
                // 实际生命周期回调
                beforeDestroy && beforeDestroy.call(this);
                // 取消绑定
                this.$onMessage = null;
                this.$poster = null;
                this.$onBridge = null;
            },
        };
        options.created = option2.created;
        options.beforeDestroy = option2.beforeDestroy;
        delete options.onMessage;
        delete options.poster;
        delete options.onBridge;
    }
    // 创建页面通讯器
    static createPoster($vm) {
        return (pageType, action, data) => {
            // 解除引用关系
            const nextData = JSON.parse(JSON.stringify(data));
            // 下一页
            if (pageType === 'nextPage') {
                // 持续 3 秒,检测下一页是否存在
                let count = 0;
                const timer = setInterval(() => {
                    if (++count > 60) {
                        clearInterval(timer);
                    }
                    const currentPages = getCurrentPages();
                    const pageIndex = currentPages.findIndex(page => page.$component === $vm);
                    const nextPage = currentPages[pageIndex + 1];
                    if (nextPage) {
                        clearInterval(timer);
                        nextPage.$component.$onMessage(action, nextData);
                    }
                }, 50);
            } else if (pageType === 'prevPage') {
                const currentPages = getCurrentPages();
                const pageIndex = currentPages.findIndex(page => page.$component === $vm);
                const prevPage = currentPages[pageIndex - 1];
                if (prevPage) {
                    prevPage.$component.$onMessage(action, nextData);
                }
            } else if (pageType === 'rootPage') {
                const currentPages = getCurrentPages();
                const rootPage = currentPages[0];
                rootPage.$component.$onMessage(action, nextData);
            }
        };
    }
    /**
     * 转换静态图片引用
     * @param assets