录音文件上传
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { login, getInfo } from '@/api/user'
|
||||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||
import { removeBusinessHeaders } from '@/utils/business-headers'
|
||||
import { resetRouter } from '@/router'
|
||||
|
||||
const getDefaultState = () => {
|
||||
@@ -75,6 +76,7 @@ const actions = {
|
||||
logout({ commit, state }) {
|
||||
return new Promise((resolve, reject) => {
|
||||
removeToken() // must remove token first
|
||||
removeBusinessHeaders()
|
||||
resetRouter()
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
@@ -85,6 +87,7 @@ const actions = {
|
||||
resetToken({ commit }) {
|
||||
return new Promise(resolve => {
|
||||
removeToken() // must remove token first
|
||||
removeBusinessHeaders()
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
})
|
||||
|
||||
43
src/utils/business-headers.js
Normal file
43
src/utils/business-headers.js
Normal file
@@ -0,0 +1,43 @@
|
||||
const HEADER_STORAGE_KEY = 'smart_drive_business_headers'
|
||||
|
||||
const DEFAULT_HEADERS = {
|
||||
'X-Role-Name': 'admin',
|
||||
'X-Scenario': 'sales',
|
||||
'X-Tenant-Id': 'TENANT_ID_SHHYQQ-20260415',
|
||||
'X-Account-Name': '15810181778'
|
||||
}
|
||||
|
||||
export function getBusinessHeaders() {
|
||||
let stored = {}
|
||||
try {
|
||||
const raw = window.localStorage.getItem(HEADER_STORAGE_KEY)
|
||||
stored = raw ? JSON.parse(raw) : {}
|
||||
} catch (e) {
|
||||
stored = {}
|
||||
}
|
||||
return {
|
||||
...DEFAULT_HEADERS,
|
||||
...stored
|
||||
}
|
||||
}
|
||||
|
||||
export function setBusinessHeaders(headers = {}) {
|
||||
const normalized = {}
|
||||
Object.keys(DEFAULT_HEADERS).forEach((key) => {
|
||||
const value = headers[key]
|
||||
if (value !== undefined && value !== null && String(value).trim() !== '') {
|
||||
normalized[key] = String(value).trim()
|
||||
}
|
||||
})
|
||||
|
||||
const next = {
|
||||
...getBusinessHeaders(),
|
||||
...normalized
|
||||
}
|
||||
window.localStorage.setItem(HEADER_STORAGE_KEY, JSON.stringify(next))
|
||||
return next
|
||||
}
|
||||
|
||||
export function removeBusinessHeaders() {
|
||||
window.localStorage.removeItem(HEADER_STORAGE_KEY)
|
||||
}
|
||||
@@ -2,6 +2,29 @@ import axios from 'axios'
|
||||
import { MessageBox, Message } from 'element-ui'
|
||||
import store from '@/store'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { getBusinessHeaders, setBusinessHeaders } from '@/utils/business-headers'
|
||||
|
||||
function pickHeaderCaseInsensitive(headers, key) {
|
||||
if (!headers) return ''
|
||||
const lowerKey = key.toLowerCase()
|
||||
const foundKey = Object.keys(headers).find(item => item.toLowerCase() === lowerKey)
|
||||
return foundKey ? headers[foundKey] : ''
|
||||
}
|
||||
|
||||
function pickValueFromSources(sources, keys) {
|
||||
for (let i = 0; i < sources.length; i++) {
|
||||
const source = sources[i]
|
||||
if (!source || typeof source !== 'object') continue
|
||||
for (let j = 0; j < keys.length; j++) {
|
||||
const key = keys[j]
|
||||
const value = source[key]
|
||||
if (value !== undefined && value !== null && String(value).trim() !== '') {
|
||||
return String(value).trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
// create an axios instance
|
||||
const service = axios.create({
|
||||
@@ -25,6 +48,11 @@ service.interceptors.request.use(
|
||||
// 使用Bearer token格式
|
||||
config.headers['Authorization'] = `Bearer ${getToken()}`
|
||||
}
|
||||
|
||||
const businessHeaders = getBusinessHeaders()
|
||||
Object.keys(businessHeaders).forEach((key) => {
|
||||
config.headers[key] = businessHeaders[key]
|
||||
})
|
||||
return config
|
||||
},
|
||||
error => {
|
||||
@@ -37,6 +65,35 @@ service.interceptors.request.use(
|
||||
// response interceptor
|
||||
service.interceptors.response.use(
|
||||
response => {
|
||||
const loginHeaderValues = {
|
||||
'X-Role-Name': pickValueFromSources(
|
||||
[response.headers, response.data?.data, response.data],
|
||||
['X-Role-Name', 'x-role-name', 'roleName', 'role_name']
|
||||
),
|
||||
'X-Scenario': pickValueFromSources(
|
||||
[response.headers, response.data?.data, response.data],
|
||||
['X-Scenario', 'x-scenario', 'scenario']
|
||||
),
|
||||
'X-Tenant-Id': pickValueFromSources(
|
||||
[response.headers, response.data?.data, response.data],
|
||||
['X-Tenant-Id', 'x-tenant-id', 'tenantId', 'tenant_id']
|
||||
),
|
||||
'X-Account-Name': pickValueFromSources(
|
||||
[response.headers, response.data?.data, response.data],
|
||||
['X-Account-Name', 'x-account-name', 'accountName', 'account_name', 'loginAccount', 'userName', 'username']
|
||||
)
|
||||
}
|
||||
|
||||
if (response.config?.url?.includes('/sys/auth/login')) {
|
||||
const normalizedFromHeader = {
|
||||
'X-Role-Name': pickHeaderCaseInsensitive(response.headers, 'X-Role-Name') || loginHeaderValues['X-Role-Name'],
|
||||
'X-Scenario': pickHeaderCaseInsensitive(response.headers, 'X-Scenario') || loginHeaderValues['X-Scenario'],
|
||||
'X-Tenant-Id': pickHeaderCaseInsensitive(response.headers, 'X-Tenant-Id') || loginHeaderValues['X-Tenant-Id'],
|
||||
'X-Account-Name': pickHeaderCaseInsensitive(response.headers, 'X-Account-Name') || loginHeaderValues['X-Account-Name']
|
||||
}
|
||||
setBusinessHeaders(normalizedFromHeader)
|
||||
}
|
||||
|
||||
const res = response.data
|
||||
console.log('response 0811 :', res)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user