导师列表和导师详情
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* 图片地址处理工具
|
||||
* 将后端返回的内部文件路径转为 OSS 公开访问地址
|
||||
*/
|
||||
|
||||
/** OSS 基础地址 */
|
||||
const OSS_BASE = 'https://jsxq-service-read.oss-cn-shenzhen.aliyuncs.com/uploads/'
|
||||
|
||||
/** 后端返回的内部路径前缀 */
|
||||
const INTERNAL_PREFIX = '/admin/sys-file/jsxq-service-read/uploads/'
|
||||
|
||||
/**
|
||||
* 将后端图片路径转为 OSS 公开地址
|
||||
* - 空值安全:传入 null / undefined / 空字符串 返回空字符串
|
||||
* - 如果已经是完整 http(s) 链接则直接返回,不做二次拼接
|
||||
* - 如果是内部路径则替换为 OSS 地址
|
||||
*/
|
||||
export function toOssUrl(path: string | null | undefined): string {
|
||||
if (!path) return ''
|
||||
// 已经是完整链接,直接返回
|
||||
if (path.startsWith('http://') || path.startsWith('https://')) return path
|
||||
// 内部路径前缀替换
|
||||
if (path.startsWith(INTERNAL_PREFIX)) {
|
||||
const filename = path.slice(INTERNAL_PREFIX.length)
|
||||
return OSS_BASE + filename
|
||||
}
|
||||
// 兜底:可能只是文件名,拼上 OSS 基础地址
|
||||
return OSS_BASE + path
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import axios from 'axios'
|
||||
import type { AxiosResponse } from 'axios'
|
||||
|
||||
/**
|
||||
* 自定义 JSON 解析:将超过安全整数范围的数字转为字符串,避免精度丢失
|
||||
* 原理:用正则把 JSON 中超长数字(≥16位)加上引号变成字符串再交给 JSON.parse
|
||||
*/
|
||||
function parseBigIntJson(text: string): any {
|
||||
// 匹配 JSON 中独立的长数字(非字符串内的),将 ≥16 位整数用引号包裹
|
||||
const processed = text.replace(/:\s*(\d{16,})/g, ':"$1"')
|
||||
return JSON.parse(processed)
|
||||
}
|
||||
|
||||
/**
|
||||
* 见识星球专用 axios 实例
|
||||
* 开发环境:走 Vite proxy(/jianshi-api → https://api.jianshixingqiu.com)解决跨域
|
||||
* 生产环境:直接请求 https://api.jianshixingqiu.com
|
||||
* 接口完全公开,不需要 token 和登录鉴权
|
||||
*/
|
||||
const jianshiRequest = axios.create({
|
||||
baseURL: import.meta.env.VITE_JIANSHI_BASE_URL as string,
|
||||
timeout: 15000,
|
||||
// 见识星球接口固定请求头
|
||||
headers: {
|
||||
Authorization: 'Bearer f69b5086-97b0-4e5e-b172-453e444d448c',
|
||||
'TENANT-ID': '1',
|
||||
'CLIENT-TOC': 'Y',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
// 自定义响应数据转换:防止大数 id 精度丢失
|
||||
transformResponse: [(data: string) => {
|
||||
if (!data) return data
|
||||
try {
|
||||
return parseBigIntJson(data)
|
||||
} catch {
|
||||
return data
|
||||
}
|
||||
}],
|
||||
})
|
||||
|
||||
/**
|
||||
* 响应拦截器
|
||||
*/
|
||||
jianshiRequest.interceptors.response.use(
|
||||
(response: AxiosResponse) => {
|
||||
return response.data
|
||||
},
|
||||
(error) => {
|
||||
console.error('[见识星球接口错误]', error)
|
||||
return Promise.reject(error)
|
||||
},
|
||||
)
|
||||
|
||||
export default jianshiRequest
|
||||
Reference in New Issue
Block a user