Files
zkxw/mobile-h5/utils/oa-h5.js
T
2026-08-13 16:50:36 +08:00

127 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { OA_H5_ORIGIN } from './config.js'
import { getToken } from './auth.js'
function trimSlash(s) {
return String(s || '').replace(/\/$/, '')
}
/** 小程序基础库未必有 URLSearchParams,用手写 query 更稳 */
function buildQuery(params) {
const parts = []
Object.keys(params || {}).forEach((k) => {
const v = params[k]
if (v == null || v === '') return
parts.push(encodeURIComponent(k) + '=' + encodeURIComponent(String(v)))
})
return parts.join('&')
}
function withQuery(path, params) {
const base = trimSlash(OA_H5_ORIGIN) + path
const qs = buildQuery(params)
return qs ? base + '?' + qs : base
}
/** 水槽页 URL(须带小程序登录 token,供 OA H5 调 /api) */
export function buildFormSinkUrl() {
const token = getToken()
return withQuery('/oa-form-sink', token ? { token } : {})
}
/**
* 关闭 web-view 失败时的小程序回退路径(须以 /pages/ 开头)。
* 优先 query.returnPath;否则取页面栈上一页。
*/
export function resolveOaReturnPath(query) {
const fromQuery = String((query && query.returnPath) || '').trim()
if (fromQuery.indexOf('/pages/') === 0) return fromQuery
try {
const pages = typeof getCurrentPages === 'function' ? getCurrentPages() : []
if (pages && pages.length >= 2) {
const prev = pages[pages.length - 2]
const route = prev && prev.route
if (route) return '/' + String(route).replace(/^\//, '')
}
} catch (_) {
/* ignore */
}
return '/pages/index/index'
}
/** 正式发起页 URL(与水槽同一套拼法,仅多 appId/draftId/fromInstanceId) */
export function buildOaStartUrl({ appId, draftId, fromInstanceId, returnPath } = {}) {
const token = getToken()
const params = {}
if (appId) params.appId = appId
if (draftId) params.draftId = draftId
if (fromInstanceId) params.fromInstanceId = fromInstanceId
if (returnPath) params.returnPath = returnPath
if (token) params.token = token
return withQuery('/oa-start', params)
}
/** 审批详情页 URL(须带 token;mode 为 view | approve;autoPrint=1 加载后自动调打印) */
export function buildOaDetailUrl({
instanceId,
taskId,
mode,
autoPrint,
returnPath
} = {}) {
const token = getToken()
const params = {}
if (instanceId) params.instanceId = instanceId
if (taskId) params.taskId = taskId
if (mode) params.mode = mode // view | approve
if (autoPrint) params.autoPrint = '1'
if (returnPath) params.returnPath = returnPath
if (token) params.token = token
return withQuery('/oa-detail', params)
}
const TITLE_KEY = 'oa_start_nav_title'
/** 跳转前缓存流程名(勿把中文放进 navigateTo / web-view URL,微信易白屏) */
export function stashOaStartTitle(name) {
const t = String(name || '').trim()
try {
if (t) uni.setStorageSync(TITLE_KEY, t)
else uni.removeStorageSync(TITLE_KEY)
} catch (_) {
/* ignore */
}
}
export function takeOaStartTitle() {
try {
const t = String(uni.getStorageSync(TITLE_KEY) || '').trim()
uni.removeStorageSync(TITLE_KEY)
return t
} catch (_) {
return ''
}
}
const DETAIL_TITLE_KEY = 'oa_detail_nav_title'
/** 跳转前缓存详情标题(勿把中文放进 navigateTo / web-view URL) */
export function stashOaDetailTitle(name) {
const t = String(name || '').trim()
try {
if (t) uni.setStorageSync(DETAIL_TITLE_KEY, t)
else uni.removeStorageSync(DETAIL_TITLE_KEY)
} catch (_) {
/* ignore */
}
}
export function takeOaDetailTitle() {
try {
const t = String(uni.getStorageSync(DETAIL_TITLE_KEY) || '').trim()
uni.removeStorageSync(DETAIL_TITLE_KEY)
return t
} catch (_) {
return ''
}
}