| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- 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 ''
- }
- }
|