Files
yuto-water-h5/src/api/common.ts
Ubuntu ed9eedc519 feat: Phase 3 - API layer + Pinia stores + app integration
- HTTP client (axios interceptors, token mgmt, typed APIs)
- Pinia stores: token, user (login/logout), app (dark mode, sidebar)
- globalConfig TS types + Window augmentation
- Vue Router (hash history, auth guard)
- Login/Home/Mine pages (Vant UI)
- Vant integration + globalConfig dev script
- Build passes (vue-tsc + vite)
2026-06-15 20:56:05 +08:00

140 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 通用 API
*
* 包含文件上传、字典查询、验证码获取、系统配置等公共接口。
*
* @module api/common
*/
import { post, get } from '@/utils/http'
// ══════════════════════════════════════════════
// 请求参数类型
// ══════════════════════════════════════════════
/** 文件上传响应 */
export interface UploadResult {
/** 文件在服务器上的存储名称 */
fileName: string
/** 文件可访问的完整 URL */
url: string
}
/** 字典项 */
export interface DictItem {
/** 字典标签(显示用) */
dictLabel: string
/** 字典值(存储用) */
dictValue: string
/** 字典类型 */
dictType?: string
/** CSS 类名(用于表格回显样式) */
cssClass?: string
/** 列表样式 */
listClass?: string
/** 是否默认 */
isDefault?: string
/** 排序号 */
dictSort?: number
}
/** 验证码图片响应 */
export interface CaptchaResult {
/** 验证码唯一标识,登录时需要回传 */
uuid: string
/** Base64 编码的验证码图片 */
img: string
/** 是否开启验证码 */
captchaEnabled: boolean
}
/** 系统配置项 */
export interface ConfigItem {
/** 参数键名 */
configKey: string
/** 参数值 */
configValue: string
}
// ══════════════════════════════════════════════
// API 方法
// ══════════════════════════════════════════════
/**
* 上传文件
*
* 支持图片、文档等文件上传,使用 FormData 格式。
*
* @param file - 要上传的文件对象
* @returns 上传结果,包含文件名和访问 URL
*/
export function uploadFile(file: File): Promise<UploadResult> {
const formData = new FormData()
formData.append('file', file)
return post<UploadResult>('/common/upload', formData, {
headers: { 'Content-Type': 'multipart/form-data' },
})
}
/**
* 批量上传文件
* @param files - 文件对象数组
* @returns 上传结果数组
*/
export async function uploadFiles(files: File[]): Promise<UploadResult[]> {
const results: UploadResult[] = []
for (const file of files) {
const result = await uploadFile(file)
results.push(result)
}
return results
}
/**
* 获取字典数据
*
* 根据字典类型查询对应的字典项列表,用于下拉框、单选框等组件的数据源。
*
* @param dictType - 字典类型标识,如 'sys_user_sex'
* @returns 字典项数组
*/
export function getDictData(dictType: string): Promise<DictItem[]> {
return get<DictItem[]>('/system/dict/data/type', { dictType })
}
/**
* 根据字典类型获取字典数据RESTful 风格)
* @param dictType - 字典类型标识
* @returns 字典项数组
*/
export function getDictDataByType(dictType: string): Promise<DictItem[]> {
return get<DictItem[]>(`/system/dict/data/type/${dictType}`)
}
/**
* 获取验证码图片
* @returns 验证码信息uuid 和 base64 图片)
*/
export function getCaptcha(): Promise<CaptchaResult> {
return get<CaptchaResult>('/captchaImage')
}
/**
* 根据配置键获取系统配置值
* @param configKey - 配置键名
* @returns 配置项的值
*/
export function getConfigValue(configKey: string): Promise<string> {
return get<string>(`/system/config/configKey/${configKey}`)
}
/**
* 获取系统配置项详情
* @param configKey - 配置键名
* @returns 配置项完整信息
*/
export function getConfigItem(configKey: string): Promise<ConfigItem> {
return get<ConfigItem>(`/system/config/configKey/${configKey}`)
}