oa-h5.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. /** 正式发起页 URL(与水槽同一套拼法,仅多 appId/draftId/fromInstanceId) */
  27. export function buildOaStartUrl({ appId, draftId, fromInstanceId } = {}) {
  28. const token = getToken()
  29. const params = {}
  30. if (appId) params.appId = appId
  31. if (draftId) params.draftId = draftId
  32. if (fromInstanceId) params.fromInstanceId = fromInstanceId
  33. if (token) params.token = token
  34. return withQuery('/oa-start', params)
  35. }
  36. /** 审批详情页 URL(须带 token;mode 为 view | approve;autoPrint=1 加载后自动调打印) */
  37. export function buildOaDetailUrl({ instanceId, taskId, mode, autoPrint } = {}) {
  38. const token = getToken()
  39. const params = {}
  40. if (instanceId) params.instanceId = instanceId
  41. if (taskId) params.taskId = taskId
  42. if (mode) params.mode = mode // view | approve
  43. if (autoPrint) params.autoPrint = '1'
  44. if (token) params.token = token
  45. return withQuery('/oa-detail', params)
  46. }
  47. const TITLE_KEY = 'oa_start_nav_title'
  48. /** 跳转前缓存流程名(勿把中文放进 navigateTo / web-view URL,微信易白屏) */
  49. export function stashOaStartTitle(name) {
  50. const t = String(name || '').trim()
  51. try {
  52. if (t) uni.setStorageSync(TITLE_KEY, t)
  53. else uni.removeStorageSync(TITLE_KEY)
  54. } catch (_) {
  55. /* ignore */
  56. }
  57. }
  58. export function takeOaStartTitle() {
  59. try {
  60. const t = String(uni.getStorageSync(TITLE_KEY) || '').trim()
  61. uni.removeStorageSync(TITLE_KEY)
  62. return t
  63. } catch (_) {
  64. return ''
  65. }
  66. }
  67. const DETAIL_TITLE_KEY = 'oa_detail_nav_title'
  68. /** 跳转前缓存详情标题(勿把中文放进 navigateTo / web-view URL) */
  69. export function stashOaDetailTitle(name) {
  70. const t = String(name || '').trim()
  71. try {
  72. if (t) uni.setStorageSync(DETAIL_TITLE_KEY, t)
  73. else uni.removeStorageSync(DETAIL_TITLE_KEY)
  74. } catch (_) {
  75. /* ignore */
  76. }
  77. }
  78. export function takeOaDetailTitle() {
  79. try {
  80. const t = String(uni.getStorageSync(DETAIL_TITLE_KEY) || '').trim()
  81. uni.removeStorageSync(DETAIL_TITLE_KEY)
  82. return t
  83. } catch (_) {
  84. return ''
  85. }
  86. }