From f58da404d459a3387f78d9bf6fe8933010f137bf Mon Sep 17 00:00:00 2001 From: coder77 <2293444075@qq.com> Date: Thu, 10 Apr 2025 11:02:22 +0800 Subject: [PATCH] feat: 日期选择器增加快捷选择 --- bases/Pilot.js | 75 +++++++++++++++++++++++++------------ 1 files changed, 51 insertions(+), 24 deletions(-) diff --git a/bases/Pilot.js b/bases/Pilot.js index 32f2394..80de29a 100644 --- a/bases/Pilot.js +++ b/bases/Pilot.js @@ -4,14 +4,11 @@ */ import Taro, { getCurrentInstance, getCurrentPages } from '@tarojs/taro'; -import { Fetcher } from './Fetcher'; -import { Tools } from '@components/common/Tools'; +import { $hostBoot } from '@components/bases/HostBoot'; import project from '@project'; export class Pilot { - - constructor() { - } + constructor() {} $data() { return {}; @@ -22,10 +19,15 @@ methods: {}, }; const names = []; + let parent = null; // 实例本身的字段 Object.getOwnPropertyNames(this).forEach(name => names.push(name)); - // 类的字段 - Object.getOwnPropertyNames(Object.getPrototypeOf(this)).forEach(name => names.push(name)); + // 基类的字段,直到Pilot为止(不含Pilot) + parent = Object.getPrototypeOf(this); + while (parent instanceof Pilot) { + Object.getOwnPropertyNames(parent).forEach(name => names.push(name)); + parent = Object.getPrototypeOf(parent); + } // 传递 names.forEach(name => { // 构造器忽略,如果存在属性 $methods 也忽略 @@ -64,9 +66,11 @@ 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); @@ -92,11 +96,11 @@ // 创建页面通讯器 static createPoster($vm) { return (pageType, action, data) => { - // 解除引用关系 + // 解除原引用关系、移除非数据内容 const nextData = JSON.parse(JSON.stringify(data || {})); - // 下一页 + // 传递消息到下一页 if (pageType === 'nextPage') { - // 持续 3 秒,检测下一页是否存在 + // 持续 3 秒,检测下一页是否存在,如果 3 秒内未创建下一页,忽略 let count = 0; const timer = setInterval(() => { if (++count > 60) { @@ -107,20 +111,44 @@ const nextPage = currentPages[pageIndex + 1]; if (nextPage) { clearInterval(timer); - nextPage.$component.$onMessage(action, nextData); + setTimeout(() => { + nextPage.$component?.$onMessage(action, nextData); + }, 0); } }, 50); - } else if (pageType === 'prevPage') { + } + // 传递消息到上一页,上一页的上一页,依次直到首页 + else if (pageType === 'prevPage') { + const currentPages = getCurrentPages(); + let pageIndex = currentPages.findIndex(page => page.$component === $vm); + while (pageIndex - 1 >= 0) { + const prevPage = currentPages[pageIndex - 1]; + if (prevPage) { + prevPage.$component?.$onMessage(action, nextData); + } + pageIndex--; + } + } + // 传递消息到原地新页(redirectTo原地新开页面) + else if (pageType === 'sitePage') { 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); + const pagePath = currentPages[pageIndex].$taroPath + // 持续 3 秒,检查当前页是否新开,如果 3 秒内没有新开,忽略 + let count = 0; + const timer = setInterval(() => { + if (++count > 60) { + clearInterval(timer); + } + const currentPages = getCurrentPages(); + const sitePage = currentPages[pageIndex]; + if (sitePage.$component !== $vm || sitePage.$taroPath !== pagePath) { + clearInterval(timer); + setTimeout(() => { + sitePage.$component?.$onMessage(action, nextData); + }, 0); + } + }, 50); } }; } @@ -145,10 +173,9 @@ } // 小程序 else if (process.env.TARO_ENV === 'weapp') { - assets2[key] = Fetcher.host + project.host.assetsPath + asset; + assets2[key] = $hostBoot.getHost() + project.host.assetsPath + asset; } }); return assets2; } - -} \ No newline at end of file +} -- Gitblit v1.9.1