127 lines
3.6 KiB
JavaScript
127 lines
3.6 KiB
JavaScript
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 ''
|
||
}
|
||
}
|