Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion ui/.editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
max_line_length = 100
max_line_length = 150
2 changes: 2 additions & 0 deletions ui/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/assets/iconfont.js
src/components.d.ts
2 changes: 1 addition & 1 deletion ui/.prettierrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
"singleQuote": true,
"printWidth": 100
"printWidth": 150
}
6 changes: 1 addition & 5 deletions ui/src/api/admin/auth/base-info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,4 @@ const getThemeInfo = () => {
return get<ThemeInfo>('/display/info')
}

export default {
getLoginConfig,
getBaseProfile,
getThemeInfo,
}
export default { getLoginConfig, getBaseProfile, getThemeInfo }
6 changes: 1 addition & 5 deletions ui/src/api/admin/auth/current-user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,4 @@ const getCurrentUserRoleList = () => {
return get<ListItem[]>('/role_list/current_user')
}

export default {
getCurrentUserInfo,
getCurrentUserRoleList,
getCurrentUserWorkspaceList,
}
export default { getCurrentUserInfo, getCurrentUserRoleList, getCurrentUserWorkspaceList }
9 changes: 1 addition & 8 deletions ui/src/api/admin/auth/external-login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,4 @@ const getLarkOauthCallback = (code: string) => {
return get<LoginResponse>('/lark/oauth2', { code })
}

export default {
getDingTalkCallback,
getDingTalkOauthCallback,
getExternalAuthSetting,
getLarkOauthCallback,
getQrCodeSources,
getSamlLoginUrl,
}
export default { getDingTalkCallback, getDingTalkOauthCallback, getExternalAuthSetting, getLarkOauthCallback, getQrCodeSources, getSamlLoginUrl }
7 changes: 1 addition & 6 deletions ui/src/api/admin/auth/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,4 @@ const getCaptcha = (username?: string) => {
return get<CaptchaResponse>('/user/captcha', { username })
}

export default {
getCaptcha,
postLdapLogin,
postLogin,
postLogout,
}
export default { getCaptcha, postLdapLogin, postLogin, postLogout }
108 changes: 16 additions & 92 deletions ui/src/api/admin/core/request.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
/** 提供 Admin API 的 Axios 实例与常用 HTTP 请求封装。 */

import axios, {
AxiosHeaders,
type AxiosRequestConfig,
type AxiosResponse,
type InternalAxiosRequestConfig,
} from 'axios'
import axios, { AxiosHeaders, type AxiosRequestConfig, type AxiosResponse, type InternalAxiosRequestConfig } from 'axios'
import router from '@/router/admin'
import { useStore } from '@/stores'
import type { ApiResponse, LoadingTarget } from './types'
Expand Down Expand Up @@ -98,11 +93,7 @@ async function getResponseErrorMessage(error: unknown) {
return responseData?.message
}

async function downloadExportResponse(
response: AxiosResponse<Blob>,
fileName: string,
mimeType = 'application/octet-stream',
) {
async function downloadExportResponse(response: AxiosResponse<Blob>, fileName: string, mimeType = 'application/octet-stream') {
if (response.data.type.includes('application/json')) {
const text = await response.data.text()
try {
Expand All @@ -123,11 +114,7 @@ async function downloadExportResponse(
return true
}

export const request = axios.create({
baseURL: `${ADMIN_BASE_PATH.replace(/\/+$/, '')}/api`,
timeout: DEFAULT_TIMEOUT,
withCredentials: false,
})
export const request = axios.create({ baseURL: `${ADMIN_BASE_PATH.replace(/\/+$/, '')}/api`, timeout: DEFAULT_TIMEOUT, withCredentials: false })

request.interceptors.request.use(setRequestHeaders)

Expand All @@ -151,8 +138,7 @@ request.interceptors.response.use(
const requestUrl = error.config?.url ?? ''
const status = error.response?.status
const responseMessage = await getResponseErrorMessage(error)
const skipGlobalErrorMessage = (error.config as ExportRequestConfig | undefined)
?.skipGlobalErrorMessage
const skipGlobalErrorMessage = (error.config as ExportRequestConfig | undefined)?.skipGlobalErrorMessage

if (error.code === 'ECONNABORTED') {
MsgError(error.message)
Expand All @@ -169,11 +155,7 @@ request.interceptors.response.use(
if (status === 403) {
MsgError(responseMessage || 'No permission to access')
}
if (
error.code !== 'ECONNABORTED' &&
![401, 403, 404].includes(status ?? 0) &&
!skipGlobalErrorMessage
) {
if (error.code !== 'ECONNABORTED' && ![401, 403, 404].includes(status ?? 0) && !skipGlobalErrorMessage) {
MsgError(responseMessage || error.message)
}

Expand All @@ -184,10 +166,7 @@ request.interceptors.response.use(
/**
* 统一解包标准 API 响应,并同步可选的 loading 状态。
*/
export async function promise<T>(
requestPromise: Promise<AxiosResponse<ApiResponse<T>>>,
loading?: LoadingTarget,
) {
export async function promise<T>(requestPromise: Promise<AxiosResponse<ApiResponse<T>>>, loading?: LoadingTarget) {
startLoading(loading)
try {
const response = await requestPromise
Expand All @@ -198,33 +177,15 @@ export async function promise<T>(
}

/** 发送 GET 请求。 */
export function get<T = unknown>(
url: string,
params?: Dict<unknown>,
loading?: LoadingTarget,
timeout?: number,
) {
export function get<T = unknown>(url: string, params?: Dict<unknown>, loading?: LoadingTarget, timeout?: number) {
return promise<T>(request.get<ApiResponse<T>>(url, { params, timeout }), loading)
}

/** 发送指定方法的 Blob 请求并触发浏览器下载。 */
export async function downloadRequest(
url: string,
method: string,
data?: unknown,
params?: Dict<unknown>,
loading?: LoadingTarget,
): Promise<boolean> {
export async function downloadRequest(url: string, method: string, data?: unknown, params?: Dict<unknown>, loading?: LoadingTarget): Promise<boolean> {
startLoading(loading)
try {
const response = await request.request<Blob>({
url,
method,
data,
params,
responseType: 'blob',
skipGlobalErrorMessage: true,
} as ExportRequestConfig)
const response = await request.request<Blob>({ url, method, data, params, responseType: 'blob', skipGlobalErrorMessage: true } as ExportRequestConfig)

return downloadExportResponse(response, 'download')
} finally {
Expand All @@ -233,19 +194,10 @@ export async function downloadRequest(
}

/** 发送 GET 请求并将 Blob 响应下载为文件。 */
export async function getExportFile(
fileName: string,
url: string,
params?: Dict<unknown>,
loading?: LoadingTarget,
): Promise<boolean> {
export async function getExportFile(fileName: string, url: string, params?: Dict<unknown>, loading?: LoadingTarget): Promise<boolean> {
startLoading(loading)
try {
const response = await request.get<Blob>(url, {
params,
responseType: 'blob',
skipGlobalErrorMessage: true,
} as ExportRequestConfig)
const response = await request.get<Blob>(url, { params, responseType: 'blob', skipGlobalErrorMessage: true } as ExportRequestConfig)

return downloadExportResponse(response, fileName)
} finally {
Expand All @@ -254,20 +206,10 @@ export async function getExportFile(
}

/** 发送 POST 请求并将 Blob 响应下载为 Excel 文件。 */
export async function postExportExcel<TData = unknown>(
fileName: string,
url: string,
params?: Dict<unknown>,
data?: TData,
loading?: LoadingTarget,
): Promise<boolean> {
export async function postExportExcel<TData = unknown>(fileName: string, url: string, params?: Dict<unknown>, data?: TData, loading?: LoadingTarget): Promise<boolean> {
startLoading(loading)
try {
const response = await request.post<Blob>(url, data, {
params,
responseType: 'blob',
skipGlobalErrorMessage: true,
} as ExportRequestConfig)
const response = await request.post<Blob>(url, data, { params, responseType: 'blob', skipGlobalErrorMessage: true } as ExportRequestConfig)

return downloadExportResponse(response, fileName, 'application/vnd.ms-excel')
} finally {
Expand All @@ -276,35 +218,17 @@ export async function postExportExcel<TData = unknown>(
}

/** 发送 POST 请求。 */
export function post<TData = unknown, T = unknown>(
url: string,
data?: TData,
params?: Dict<unknown>,
loading?: LoadingTarget,
timeout?: number,
) {
export function post<TData = unknown, T = unknown>(url: string, data?: TData, params?: Dict<unknown>, loading?: LoadingTarget, timeout?: number) {
return promise<T>(request.post<ApiResponse<T>>(url, data, { params, timeout }), loading)
}

/** 发送 PUT 请求。 */
export function put<TData = unknown, T = unknown>(
url: string,
data?: TData,
params?: Dict<unknown>,
loading?: LoadingTarget,
timeout?: number,
) {
export function put<TData = unknown, T = unknown>(url: string, data?: TData, params?: Dict<unknown>, loading?: LoadingTarget, timeout?: number) {
return promise<T>(request.put<ApiResponse<T>>(url, data, { params, timeout }), loading)
}

/** 发送 DELETE 请求。 */
export function del<TData = unknown, T = unknown>(
url: string,
params?: Dict<unknown>,
data?: TData,
loading?: LoadingTarget,
timeout?: number,
) {
export function del<TData = unknown, T = unknown>(url: string, params?: Dict<unknown>, data?: TData, loading?: LoadingTarget, timeout?: number) {
return promise<T>(request.delete<ApiResponse<T>>(url, { params, data, timeout }), loading)
}

Expand Down
33 changes: 5 additions & 28 deletions ui/src/api/admin/model-provider.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import { get } from './core/request'
import type {
BaseModelOption,
DynamicFormField,
ModelProviderItem,
ModelTypeOption,
} from '@/api/types'
import type { BaseModelOption, DynamicFormField, ModelProviderItem, ModelTypeOption } from '@/api/types'

const prefix = '/provider'

Expand All @@ -20,20 +15,12 @@ const getProviderListByModelType = (modelType: string) => {

/** 获取创建模型所需的动态表单。 */
const getModelCreateForm = (provider: string, modelType: string, modelName: string) => {
return get<DynamicFormField[]>(`${prefix}/model_form`, {
model_name: modelName,
model_type: modelType,
provider,
})
return get<DynamicFormField[]>(`${prefix}/model_form`, { model_name: modelName, model_type: modelType, provider })
}

/** 获取基础模型的动态参数表单。 */
const getBaseModelParamsForm = (provider: string, modelType: string, modelName: string) => {
return get<DynamicFormField[]>(`${prefix}/model_params_form`, {
model_name: modelName,
model_type: modelType,
provider,
})
return get<DynamicFormField[]>(`${prefix}/model_params_form`, { model_name: modelName, model_type: modelType, provider })
}

/** 获取供应商支持的模型类型。 */
Expand All @@ -43,17 +30,7 @@ const getModelTypeList = (provider: string) => {

/** 获取供应商指定类型下的基础模型。 */
const getBaseModelList = (provider: string, modelType: string) => {
return get<BaseModelOption[]>(`${prefix}/model_list`, {
model_type: modelType,
provider,
})
return get<BaseModelOption[]>(`${prefix}/model_list`, { model_type: modelType, provider })
}

export default {
getBaseModelList,
getBaseModelParamsForm,
getModelCreateForm,
getModelTypeList,
getProviderList,
getProviderListByModelType,
}
export default { getBaseModelList, getBaseModelParamsForm, getModelCreateForm, getModelTypeList, getProviderList, getProviderListByModelType }
6 changes: 1 addition & 5 deletions ui/src/api/admin/system/chat-user/chat-user-auth-scan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,4 @@ const putValidateQrLoginPlatform = (payload: QrLoginPlatformPayload) => {
return put<QrLoginPlatformPayload, boolean>(prefix, payload)
}

export default {
getQrLoginPlatforms,
postQrLoginPlatform,
putValidateQrLoginPlatform,
}
export default { getQrLoginPlatforms, postQrLoginPlatform, putValidateQrLoginPlatform }
6 changes: 1 addition & 5 deletions ui/src/api/admin/system/chat-user/chat-user-auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,4 @@ const postAuthSettingConnection = (payload: AuthProviderSettingPayload) => {
const putAuthSetting = (authType: AuthProviderType, payload: AuthProviderSettingPayload) => {
return put<AuthProviderSettingPayload, boolean>(`${prefix}/${authType}/info`, payload)
}
export default {
getAuthSetting,
postAuthSettingConnection,
putAuthSetting,
}
export default { getAuthSetting, postAuthSettingConnection, putAuthSetting }
22 changes: 4 additions & 18 deletions ui/src/api/admin/system/chat-user/chat-user-groups.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,17 @@ const deleteChatUserGroup = (groupId: string) => {

/** 获取用户组成员分页列表。 */
const getChatUserGroupMembers = (groupId: string, page: ParamsPage, query?: Dict<unknown>) => {
return get<ResponsePage<ChatUserGroupMember>>(
`${prefix}/${groupId}/user_list/${page.currentPage}/${page.pageSize}`,
query,
)
return get<ResponsePage<ChatUserGroupMember>>(`${prefix}/${groupId}/user_list/${page.currentPage}/${page.pageSize}`, query)
}

/** 添加对话用户组成员。 */
const postChatUserGroupMembers = (groupId: string, userIds: string[]) => {
return post<{ user_ids: string[] }, boolean>(`${prefix}/${groupId}/add_member`, {
user_ids: userIds,
})
return post<{ user_ids: string[] }, boolean>(`${prefix}/${groupId}/add_member`, { user_ids: userIds })
}

/** 移除对话用户组成员。 */
const postRemoveChatUserGroupMembers = (groupId: string, relationIds: string[]) => {
return post<{ group_relation_ids: string[] }, boolean>(`${prefix}/${groupId}/remove_member`, {
group_relation_ids: relationIds,
})
return post<{ group_relation_ids: string[] }, boolean>(`${prefix}/${groupId}/remove_member`, { group_relation_ids: relationIds })
}

export default {
deleteChatUserGroup,
getChatUserGroupMembers,
getChatUserGroups,
postChatUserGroup,
postChatUserGroupMembers,
postRemoveChatUserGroupMembers,
}
export default { deleteChatUserGroup, getChatUserGroupMembers, getChatUserGroups, postChatUserGroup, postChatUserGroupMembers, postRemoveChatUserGroupMembers }
10 changes: 2 additions & 8 deletions ui/src/api/admin/system/chat-user/chat-user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ const getChatUser = () => {

/** 获取对话用户分页列表。 */
const getChatUserPage = (page: ParamsPage, query?: Dict<unknown>) => {
return get<ResponsePage<ChatUser>>(
`${prefix}/user_manage/${page.currentPage}/${page.pageSize}`,
query,
)
return get<ResponsePage<ChatUser>>(`${prefix}/user_manage/${page.currentPage}/${page.pageSize}`, query)
}

/** 创建对话用户。 */
Expand Down Expand Up @@ -71,10 +68,7 @@ const postChatUserQuota = (userId: string, payload: ChatUserQuotaPayload) => {

/** 批量设置对话用户 Token 配额。 */
const postBatchSetChatUserQuota = (request: BatchSetChatUserQuotaRequest) => {
return post<BatchSetChatUserQuotaRequest, BatchSetChatUserQuotaResult>(
`${prefix}/batch_quota`,
request,
)
return post<BatchSetChatUserQuotaRequest, BatchSetChatUserQuotaResult>(`${prefix}/batch_quota`, request)
}

/** 获取可导入的对话用户来源。 */
Expand Down
6 changes: 1 addition & 5 deletions ui/src/api/admin/system/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,4 @@ const getWorkspaceMembers = (workspaceId: string, query?: Dict<unknown>) => {
return get<CommonUserOption[]>(`/workspace/${workspaceId}/user_member`, query)
}

export default {
getDefaultPassword,
getAllUsers,
getWorkspaceMembers,
}
export default { getDefaultPassword, getAllUsers, getWorkspaceMembers }
Loading
Loading