Files
lina/src/utils/org.js
2024-05-16 13:53:47 +08:00

89 lines
2.3 KiB
JavaScript

import store from '@/store'
import { getQueryFromPath } from '@/utils/common'
export const DEFAULT_ORG_ID = '00000000-0000-0000-0000-000000000002'
export const SYSTEM_ORG_ID = '00000000-0000-0000-0000-000000000004'
export const GLOBAL_ORG_ID = '00000000-0000-0000-0000-000000000000'
function getPropOrg() {
const orgs = store.getters.usingOrgs
const preOrg = store.getters.preOrg || {}
const preFound = orgs.find((item) => item.id === preOrg.id)
if (preFound) {
return preFound
}
const defaultOrg = orgs.find((item) => item.is_default)
if (defaultOrg) {
return defaultOrg
}
return orgs.filter(item => !item['is_root'] && item.id !== SYSTEM_ORG_ID)[0]
}
async function change2PropOrg() {
const org = getPropOrg()
await changeOrg(org)
}
async function changeOrg(org, reload = true, vm = null) {
await store.dispatch('users/setCurrentOrg', org)
await store.dispatch('app/reset')
const fullPath = location.hash.slice(1)
const query = getQueryFromPath(fullPath)
const index = fullPath.indexOf('?')
let path
if (index !== -1) {
path = fullPath.slice(0, index)
} else {
path = fullPath
}
// 替换 Path 中的 UUID
const idRegex = /\/?([a-fA-F0-9]{8}-(?:[a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12})|(-?\d+(\.\d+)?)\/?/
const i = path.search(idRegex)
if (i !== -1) {
path = path.slice(0, i + 1)
}
// 替换 Query 中的 UUID
const newQuery = {}
const ignoreOrgQueryKey = ['platform']
for (const [key, value] of Object.entries(query)) {
if (ignoreOrgQueryKey.includes(key)) {
newQuery[key] = value
continue
}
if (!value.match(idRegex)) {
newQuery[key] = value
}
}
const queryStr = Object.entries(newQuery).map(([key, value]) => `${key}=${value}`).join('&')
path = path + (queryStr ? '?' + queryStr : '')
if (vm) {
const result = vm.$router.resolve({ path })
if (result.resolved.name === '404') {
path = '/'
}
}
location.hash = '#' + path
setTimeout(() => location.reload(), 500)
}
function hasCurrentOrgPermission() {
const currentOrg = store.getters.currentOrg
const currentOrgId = currentOrg.id
const orgs = store.getters.usingOrgs
return orgs.find((item) => item.id === currentOrgId)
}
export default {
hasCurrentOrgPermission,
DEFAULT_ORG_ID,
SYSTEM_ORG_ID,
GLOBAL_ORG_ID,
change2PropOrg,
changeOrg,
getPropOrg
}