录音文件上传
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import { login, getInfo } from '@/api/user'
|
import { login, getInfo } from '@/api/user'
|
||||||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||||
|
import { removeBusinessHeaders } from '@/utils/business-headers'
|
||||||
import { resetRouter } from '@/router'
|
import { resetRouter } from '@/router'
|
||||||
|
|
||||||
const getDefaultState = () => {
|
const getDefaultState = () => {
|
||||||
@@ -75,6 +76,7 @@ const actions = {
|
|||||||
logout({ commit, state }) {
|
logout({ commit, state }) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
removeToken() // must remove token first
|
removeToken() // must remove token first
|
||||||
|
removeBusinessHeaders()
|
||||||
resetRouter()
|
resetRouter()
|
||||||
commit('RESET_STATE')
|
commit('RESET_STATE')
|
||||||
resolve()
|
resolve()
|
||||||
@@ -85,6 +87,7 @@ const actions = {
|
|||||||
resetToken({ commit }) {
|
resetToken({ commit }) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
removeToken() // must remove token first
|
removeToken() // must remove token first
|
||||||
|
removeBusinessHeaders()
|
||||||
commit('RESET_STATE')
|
commit('RESET_STATE')
|
||||||
resolve()
|
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 { MessageBox, Message } from 'element-ui'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import { getToken } from '@/utils/auth'
|
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
|
// create an axios instance
|
||||||
const service = axios.create({
|
const service = axios.create({
|
||||||
@@ -25,6 +48,11 @@ service.interceptors.request.use(
|
|||||||
// 使用Bearer token格式
|
// 使用Bearer token格式
|
||||||
config.headers['Authorization'] = `Bearer ${getToken()}`
|
config.headers['Authorization'] = `Bearer ${getToken()}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const businessHeaders = getBusinessHeaders()
|
||||||
|
Object.keys(businessHeaders).forEach((key) => {
|
||||||
|
config.headers[key] = businessHeaders[key]
|
||||||
|
})
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
@@ -37,6 +65,35 @@ service.interceptors.request.use(
|
|||||||
// response interceptor
|
// response interceptor
|
||||||
service.interceptors.response.use(
|
service.interceptors.response.use(
|
||||||
response => {
|
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
|
const res = response.data
|
||||||
console.log('response 0811 :', res)
|
console.log('response 0811 :', res)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user