99 lines
2.8 KiB
JavaScript
99 lines
2.8 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 } : {})
|
||
}
|
||
|
||
/** 正式发起页 URL(与水槽同一套拼法,仅多 appId/draftId/fromInstanceId) */
|
||
export function buildOaStartUrl({ appId, draftId, fromInstanceId } = {}) {
|
||
const token = getToken()
|
||
const params = {}
|
||
if (appId) params.appId = appId
|
||
if (draftId) params.draftId = draftId
|
||
if (fromInstanceId) params.fromInstanceId = fromInstanceId
|
||
if (token) params.token = token
|
||
return withQuery('/oa-start', params)
|
||
}
|
||
|
||
/** 审批详情页 URL(须带 token;mode 为 view | approve;autoPrint=1 加载后自动调打印) */
|
||
export function buildOaDetailUrl({ instanceId, taskId, mode, autoPrint } = {}) {
|
||
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 (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 ''
|
||
}
|
||
}
|