文章编辑器问题

This commit is contained in:
Alex-larget
2026-03-14 23:27:22 +08:00
parent d82ef6d8e4
commit 7ece8f52ff
24 changed files with 642 additions and 217 deletions

View File

@@ -9,9 +9,12 @@ import { getAdminToken } from './auth'
/** 未设置环境变量时使用的默认 API 地址(零配置部署) */
const DEFAULT_API_BASE = 'https://soulapi.quwanzhi.com'
/** 请求超时(毫秒),避免接口无响应时一直卡在加载中 */
/** 默认请求超时(毫秒),避免接口无响应时一直卡在加载中 */
const REQUEST_TIMEOUT = 15000
/** 大请求(如保存长文章)超时 */
export const SAVE_REQUEST_TIMEOUT = 60000
const getBaseUrl = (): string => {
const url = import.meta.env.VITE_API_BASE_URL
if (typeof url === 'string' && url.length > 0) return url.replace(/\/$/, '')
@@ -25,7 +28,11 @@ export function apiUrl(path: string): string {
return base ? `${base}${p}` : p
}
export type RequestInitWithBody = RequestInit & { data?: unknown }
export type RequestInitWithBody = RequestInit & {
data?: unknown
/** 自定义超时(毫秒),不传则用默认 15s */
timeout?: number
}
/**
* 发起请求。path 为与现网一致的 API 路径(如 /api/admin、/api/orders
@@ -46,8 +53,9 @@ export async function request<T = unknown>(
headers.set('Content-Type', 'application/json')
}
const body = data !== undefined && data !== null ? JSON.stringify(data) : init.body
const timeout = (init as RequestInitWithBody).timeout ?? REQUEST_TIMEOUT
const controller = new AbortController()
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT)
const timeoutId = setTimeout(() => controller.abort(), timeout)
const res = await fetch(url, {
...init,
headers,
@@ -88,12 +96,12 @@ export function get<T = unknown>(path: string, init?: RequestInit): Promise<T> {
}
/** POST */
export function post<T = unknown>(path: string, data?: unknown, init?: RequestInit): Promise<T> {
export function post<T = unknown>(path: string, data?: unknown, init?: RequestInitWithBody): Promise<T> {
return request<T>(path, { ...init, method: 'POST', data })
}
/** PUT */
export function put<T = unknown>(path: string, data?: unknown, init?: RequestInit): Promise<T> {
export function put<T = unknown>(path: string, data?: unknown, init?: RequestInitWithBody): Promise<T> {
return request<T>(path, { ...init, method: 'PUT', data })
}