聊天室创建工单

This commit is contained in:
2025-12-24 19:50:38 +08:00
parent a613eb4fa1
commit 41bc41cfcd
18 changed files with 519 additions and 108 deletions

View File

@@ -7,6 +7,7 @@
declare const uni: {
getStorageSync: (key: string) => any
request: (options: any) => void
uploadFile: (options: any) => void
}
import type { ResultDomain } from '../types'
@@ -46,4 +47,40 @@ export function request<T>(options: {
})
}
// 文件上传方法
export function uploadFile<T>(options: {
url: string
filePath: string
name?: string
formData?: Record<string, any>
header?: Record<string, string>
}): Promise<ResultDomain<T>> {
return new Promise((resolve, reject) => {
const token = uni.getStorageSync('token') as string
uni.uploadFile({
url: BASE_URL + options.url,
filePath: options.filePath,
name: options.name || 'file',
formData: options.formData,
header: {
...(token ? { 'Authorization': `Bearer ${token}` } : {}),
...options.header
},
success: (res: any) => {
try {
if (res.statusCode === 200) {
const result = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
resolve(result as ResultDomain<T>)
} else {
reject(new Error(`上传失败: ${res.statusCode}`))
}
} catch (error) {
reject(new Error('解析响应失败'))
}
},
fail: (err: any) => {
reject(err)
}
})
})
}

View File

@@ -0,0 +1,74 @@
import { request, uploadFile } from '../base'
import type { ResultDomain, TbSysFileDTO, FileUploadParam, BatchFileUploadParam } from '../../types'
import { BASE_URL } from '../../config'
export const fileAPI = {
baseUrl: '/urban-lifeline/file',
/**
* 上传单个文件uni-app 版本)
* @param filePath 文件临时路径
* @param param 文件上传参数
* @returns Promise<ResultDomain<TbSysFileDTO>>
*/
uploadFile(filePath: string, param?: FileUploadParam): Promise<ResultDomain<TbSysFileDTO>> {
return uploadFile<TbSysFileDTO>({
url: `${this.baseUrl}/upload`,
filePath: filePath,
name: 'file',
formData: {
module: param?.module || '',
optsn: param?.optsn || '',
uploader: param?.uploader || ''
}
})
},
/**
* 批量上传文件uni-app 版本)
* @param filePaths 文件临时路径数组
* @param param 批量文件上传参数
* @returns Promise<ResultDomain<TbSysFileDTO>>
*/
async batchUploadFiles(filePaths: string[], param?: BatchFileUploadParam): Promise<ResultDomain<TbSysFileDTO>> {
const uploadPromises = filePaths.map(filePath =>
this.uploadFile(filePath, param)
)
try {
const results = await Promise.all(uploadPromises)
// 返回包含所有上传文件的结果
const uploadedFiles = results
.filter((r: ResultDomain<TbSysFileDTO>) => r.success && r.data)
.map((r: ResultDomain<TbSysFileDTO>) => r.data!)
return {
success: true,
dataList: uploadedFiles
} as ResultDomain<TbSysFileDTO>
} catch (error) {
return {
success: false,
message: '批量上传失败'
} as ResultDomain<TbSysFileDTO>
}
},
/**
* 获取文件信息
* @param fileId 文件ID
* @returns Promise<ResultDomain<TbSysFileDTO>>
*/
getFileById(fileId: string): Promise<ResultDomain<TbSysFileDTO>> {
return request<TbSysFileDTO>({ url: `${BASE_URL}${this.baseUrl}/${fileId}`, method: 'GET' })
},
/**
* 获取文件下载 URL
* @param fileId 文件ID
* @returns string
*/
getDownloadUrl(fileId: string): string {
return `${BASE_URL}${this.baseUrl}/download/${fileId}`
}
}

View File

@@ -0,0 +1 @@
export * from './file'

View File

@@ -1,4 +1,5 @@
export * from "./base"
export * from "./sys"
export * from "./workcase"
export * from "./ai"
export * from "./ai"
export * from "./file"