This commit is contained in:
hero920103 committed 2026-10-11 23:25:36 +08:00
1 parent 48f3bd997c
commit 184d5b0403
9 files changed
+513 -115

No files matched your search

+36 -7
View File
@@ -1,9 +1,12 @@
/**
* 菜单 → 页面 的跳转分发
*
* 聚合平台里绝大多数业务功能(ERP / OA / CRM / CMS)目前只有 Web 端实现,
* 端上没有对应页面;少数功能(记事本、日程提醒)已有原生页面。
* 这里统一判定:能走原生就走原生,否则丢进 webview 容器打开 Web 端深链。
* 小程序端「已开发」的只有少数原生页面(记事本、日程、OA 若干),
* 其余菜单在端上都没有对应页面:过去统一丢进 webview 打开 Web 端,
* 而 Web 端没登录态会被路由守卫送到统一认证登录页,用户看到的是「登录」而不是功能。
*
* 现在的判定:命中原生页 → 打开原生页;命中 WEB_RULES(Web 端确已上线、可免登录打开)
* → 走 webview;其余一律进入「功能开发中」占位页。
*/
import { createAppTicket } from '@/api/auth.js'
@@ -26,6 +29,23 @@ const NATIVE_RULES = [
/** Web 端容器页 */
const WEBVIEW_PAGE = '/pages/apps/webview'
/**
* 确已在 Web 端上线、可以免登录直接打开的功能(按菜单 title 或 path 关键词匹配)。
* 命中 → webview 打开 Web 端;未命中 → 「功能开发中」占位页。
* 新功能上线时把对应关键词加进来即可。
*/
const WEB_RULES = []
/** 开发中原生占位页 */
const DEVELOPING_PAGE = '/pages/common/developing'
/** 该功能在小程序端尚未开发 */
function openDeveloping(name) {
uni.navigateTo({
url: DEVELOPING_PAGE + '?t=' + encodeURIComponent(name || '功能')
})
}
/** 菜单是否命中移动端原生页面 */
export function resolveNativeRoute(menu = {}) {
const haystack = (menu.title || '') + ' ' + (menu.path || '')
@@ -73,13 +93,22 @@ export function openMenu(menu, fallbackTitle = '') {
return
}
if (!menu.path) {
uni.showToast({ title: name + '暂未开放', icon: 'none' })
const target = String(menu.path || '').trim()
// 完整外链直接打开,不走开发中判定
if (/^https?:\/\//i.test(target)) {
openRawUrl(target, name)
return
}
// 走 Web 端:先换一次性票据实现免登录,失败则降级为直接打开(用户手动登录一次)
openWebPage(menu.path, name)
// Web 端确已上线的功能仍走 webview(带一次性票据免登录)
const haystack = name + ' ' + target
if (target && WEB_RULES.some((kw) => haystack.indexOf(kw) !== -1)) {
openWebPage(target, name)
return
}
// 端上没有对应页面 = 功能未开发:进占位页,不再跳 Web 的统一认证登录
openDeveloping(name)
}
/**