源文件

This commit is contained in:
gyq
2024-05-23 14:39:33 +08:00
commit a1128dd791
2997 changed files with 500069 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
/**
* 页面跳转工具类
*
* @author terrfly
* @site https://www.jeequan.com
* @date 2022/11/14 17:12
*/
// 引入 pages用于解析 pageId 变量 , 注意 需要在 pages.json 定义pageId 参数。
// 使用方法: go.to(""), 优点: 扩展分包可任意路径业务调用不再传入固定URL, 传入的是pageId变量。
import pagesJSON from '@/pages.json'
import emit from './emit.js'
// 获取到全部的页面路径 和 ID
const ALL_PAGES = { }
// 添加到 ALL_PAGES
function addPages(pagesRoot){
let rootUrl = pagesRoot.root ? `/${pagesRoot.root}/` : '/'
pagesRoot.pages.forEach(r => {
if(r.pageId){
ALL_PAGES[r.pageId] = rootUrl + r.path
}
})
}
// 1. 添加 主目录
addPages(pagesJSON)
// 2. 添加分包文件 目录
if(pagesJSON.subPackages){
pagesJSON.subPackages.forEach(r => addPages(r))
}
const model = {
// 跳转类型
GO_TYPE_TO: 'navigateTo',
GO_TYPE_REDIRECT: 'redirect',
GO_TYPE_RELAUNCH: 'reLaunch',
GO_TYPE_SWITCHTAB: 'switchTab',
// 对象转换url参数
object2param: (obj) => {
if(!obj || Object.keys(obj).length <= 0){
return ""
}
let result = "?"
Object.keys(obj).forEach(k => {
let val = obj[k]
// H5需要转码 其他平台不需要
// #ifdef H5
val = encodeURIComponent(val)
// #endif
result += `${k}=${val}&`
})
return result.substr(0, (result.length - 1));
},
// uni.navigateTo函数的封装 保留当前页面跳转到应用内的某个页面使用uni.navigateBack可以返回到原页面。
// 参数: pagesIdOrUrl(路径或者pageId), 页面参数, 扩展参数
to: (pagesIdOrUrl, params = {}, type = model.GO_TYPE_TO, extObject = {}) => {
// 使用ID作为标识
if(pagesIdOrUrl.indexOf('PAGES_') == 0){
pagesIdOrUrl = ALL_PAGES[pagesIdOrUrl]
}
pagesIdOrUrl += model.object2param(params)
if(type == model.GO_TYPE_TO){
uni.navigateTo(Object.assign({ url: pagesIdOrUrl }, extObject))
}
if(type == model.GO_TYPE_REDIRECT){
uni.redirectTo(Object.assign({ url: pagesIdOrUrl }, extObject))
}
if(type == model.GO_TYPE_RELAUNCH){
uni.reLaunch(Object.assign({ url: pagesIdOrUrl }, extObject))
}
if(type == model.GO_TYPE_SWITCHTAB){
uni.switchTab(Object.assign({ url: pagesIdOrUrl }, extObject))
}
},
// 跳转到通用搜索页面
toSearchPage: (pageType, extObject = {}) => {
model.to("PAGES_LIST_SEARCH", Object.assign({type: pageType}, extObject))
},
// delta 返回到第几页, refEmitEventName: 触发全局更新函数 (更新 list and search )
back: (delta = 1, refEmitEventName) => {
if(refEmitEventName){
emit.refPageAndSearchEmit(refEmitEventName)
}
uni.navigateBack(delta)
}
}
export default model