oa-h5.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import { OA_H5_ORIGIN } from './config.js'
  2. import { getToken } from './auth.js'
  3. function trimSlash(s) {
  4. return String(s || '').replace(/\/$/, '')
  5. }
  6. /** 小程序基础库未必有 URLSearchParams,用手写 query 更稳 */
  7. function buildQuery(params) {
  8. const parts = []
  9. Object.keys(params || {}).forEach((k) => {
  10. const v = params[k]
  11. if (v == null || v === '') return
  12. parts.push(encodeURIComponent(k) + '=' + encodeURIComponent(String(v)))
  13. })
  14. return parts.join('&')
  15. }
  16. function withQuery(path, params) {
  17. const base = trimSlash(OA_H5_ORIGIN) + path
  18. const qs = buildQuery(params)
  19. return qs ? base + '?' + qs : base
  20. }
  21. /** 水槽页 URL(须带小程序登录 token,供 OA H5 调 /api) */
  22. export function buildFormSinkUrl() {
  23. const token = getToken()
  24. return withQuery('/oa-form-sink', token ? { token } : {})
  25. }
  26. /**
  27. * 关闭 web-view 失败时的小程序回退路径(须以 /pages/ 开头)。
  28. * 优先 query.returnPath;否则取页面栈上一页。
  29. */
  30. export function resolveOaReturnPath(query) {
  31. const fromQuery = String((query && query.returnPath) || '').trim()
  32. if (fromQuery.indexOf('/pages/') === 0) return fromQuery
  33. try {
  34. const pages = typeof getCurrentPages === 'function' ? getCurrentPages() : []
  35. if (pages && pages.length >= 2) {
  36. const prev = pages[pages.length - 2]
  37. const route = prev && prev.route
  38. if (route) return '/' + String(route).replace(/^\//, '')
  39. }
  40. } catch (_) {
  41. /* ignore */
  42. }
  43. return '/pages/index/index'
  44. }
  45. /** 正式发起页 URL(与水槽同一套拼法,仅多 appId/draftId/fromInstanceId) */
  46. export function buildOaStartUrl({ appId, draftId, fromInstanceId, returnPath } = {}) {
  47. const token = getToken()
  48. const params = {}
  49. if (appId) params.appId = appId
  50. if (draftId) params.draftId = draftId
  51. if (fromInstanceId) params.fromInstanceId = fromInstanceId
  52. if (returnPath) params.returnPath = returnPath
  53. if (token) params.token = token
  54. return withQuery('/oa-start', params)
  55. }
  56. /** 审批详情页 URL(须带 token;mode 为 view | approve;autoPrint=1 加载后自动调打印) */
  57. export function buildOaDetailUrl({
  58. instanceId,
  59. taskId,
  60. mode,
  61. autoPrint,
  62. returnPath
  63. } = {}) {
  64. const token = getToken()
  65. const params = {}
  66. if (instanceId) params.instanceId = instanceId
  67. if (taskId) params.taskId = taskId
  68. if (mode) params.mode = mode // view | approve
  69. if (autoPrint) params.autoPrint = '1'
  70. if (returnPath) params.returnPath = returnPath
  71. if (token) params.token = token
  72. return withQuery('/oa-detail', params)
  73. }
  74. const TITLE_KEY = 'oa_start_nav_title'
  75. /** 跳转前缓存流程名(勿把中文放进 navigateTo / web-view URL,微信易白屏) */
  76. export function stashOaStartTitle(name) {
  77. const t = String(name || '').trim()
  78. try {
  79. if (t) uni.setStorageSync(TITLE_KEY, t)
  80. else uni.removeStorageSync(TITLE_KEY)
  81. } catch (_) {
  82. /* ignore */
  83. }
  84. }
  85. export function takeOaStartTitle() {
  86. try {
  87. const t = String(uni.getStorageSync(TITLE_KEY) || '').trim()
  88. uni.removeStorageSync(TITLE_KEY)
  89. return t
  90. } catch (_) {
  91. return ''
  92. }
  93. }
  94. const DETAIL_TITLE_KEY = 'oa_detail_nav_title'
  95. /** 跳转前缓存详情标题(勿把中文放进 navigateTo / web-view URL) */
  96. export function stashOaDetailTitle(name) {
  97. const t = String(name || '').trim()
  98. try {
  99. if (t) uni.setStorageSync(DETAIL_TITLE_KEY, t)
  100. else uni.removeStorageSync(DETAIL_TITLE_KEY)
  101. } catch (_) {
  102. /* ignore */
  103. }
  104. }
  105. export function takeOaDetailTitle() {
  106. try {
  107. const t = String(uni.getStorageSync(DETAIL_TITLE_KEY) || '').trim()
  108. uni.removeStorageSync(DETAIL_TITLE_KEY)
  109. return t
  110. } catch (_) {
  111. return ''
  112. }
  113. }