🔖 项目重命名.

This commit is contained in:
lijiahangmax
2024-05-16 00:03:30 +08:00
parent f7189e34cb
commit d3a045ec20
1511 changed files with 4199 additions and 4128 deletions

View File

@@ -0,0 +1,36 @@
import type { HostGroupQueryResponse } from '@/api/asset/host-group';
import type { HostQueryResponse } from './host';
import type { HostKeyQueryResponse } from './host-key';
import type { HostIdentityQueryResponse } from './host-identity';
import axios from 'axios';
/**
* 已授权的主机 查询响应
*/
export interface AuthorizedHostQueryResponse {
groupTree: Array<HostGroupQueryResponse>;
hostList: Array<HostQueryResponse>;
treeNodes: Record<string, Array<number>>;
latestHosts: Array<number>;
}
/**
* 查询当前用户已授权的主机
*/
export function getCurrentAuthorizedHost(type: string) {
return axios.get<AuthorizedHostQueryResponse>('/asset/authorized-data/current-host', { params: { type } });
}
/**
* 查询当前用户已授权的主机秘钥
*/
export function getCurrentAuthorizedHostKey() {
return axios.get<Array<HostKeyQueryResponse>>('/asset/authorized-data/current-host-key');
}
/**
* 查询当前用户已授权的主机身份
*/
export function getCurrentAuthorizedHostIdentity() {
return axios.get<Array<HostIdentityQueryResponse>>('/asset/authorized-data/current-host-identity');
}

View File

@@ -0,0 +1,60 @@
import axios from 'axios';
/**
* 数据授权 请求对象
*/
export interface AssetDataGrantRequest {
userId?: number;
roleId?: number;
idList?: Array<number>;
}
/**
* 授权数据 查询请求对象
*/
export interface AssetAuthorizedDataQueryRequest {
userId?: number;
roleId?: number;
}
/**
* 主机分组授权
*/
export function grantHostGroup(request: AssetDataGrantRequest) {
return axios.put('/asset/data-grant/grant-host-group', request);
}
/**
* 获取已授权的主机分组
*/
export function getAuthorizedHostGroup(params: AssetAuthorizedDataQueryRequest) {
return axios.get<Array<number>>('/asset/data-grant/get-host-group', { params });
}
/**
* 主机秘钥授权
*/
export function grantHostKey(request: AssetDataGrantRequest) {
return axios.put('/asset/data-grant/grant-host-key', request);
}
/**
* 获取已授权的主机秘钥
*/
export function getAuthorizedHostKey(params: AssetAuthorizedDataQueryRequest) {
return axios.get<Array<number>>('/asset/data-grant/get-host-key', { params });
}
/**
* 主机身份授权
*/
export function grantHostIdentity(request: AssetDataGrantRequest) {
return axios.put('/asset/data-grant/grant-host-identity', request);
}
/**
* 获取已授权的主机身份
*/
export function getAuthorizedHostIdentity(params: AssetAuthorizedDataQueryRequest) {
return axios.get<Array<number>>('/asset/data-grant/get-host-identity', { params });
}

View File

@@ -0,0 +1,54 @@
import type { CommandSnippetQueryResponse } from './command-snippet';
import axios from 'axios';
/**
* 命令片段分组创建请求
*/
export interface CommandSnippetGroupCreateRequest {
name?: string;
}
/**
* 命令片段分组更新请求
*/
export interface CommandSnippetGroupUpdateRequest extends CommandSnippetGroupCreateRequest {
id?: number;
}
/**
* 命令片段分组查询响应
*/
export interface CommandSnippetGroupQueryResponse {
id: number;
name: string;
items: Array<CommandSnippetQueryResponse>;
}
/**
* 创建命令片段分组
*/
export function createCommandSnippetGroup(request: CommandSnippetGroupCreateRequest) {
return axios.post('/asset/command-snippet-group/create', request);
}
/**
* 更新命令片段分组
*/
export function updateCommandSnippetGroup(request: CommandSnippetGroupUpdateRequest) {
return axios.put('/asset/command-snippet-group/update', request);
}
/**
* 查询全部命令片段分组
*/
export function getCommandSnippetGroupList() {
return axios.get<Array<CommandSnippetGroupQueryResponse>>('/asset/command-snippet-group/list');
}
/**
* 删除命令片段分组
*/
export function deleteCommandSnippetGroup(id: number) {
return axios.delete('/asset/command-snippet-group/delete', { params: { id } });
}

View File

@@ -0,0 +1,69 @@
import type { CommandSnippetGroupQueryResponse } from './command-snippet-group';
import axios from 'axios';
/**
* 命令片段创建请求
*/
export interface CommandSnippetCreateRequest {
groupId?: number;
name?: string;
command?: string;
}
/**
* 命令片段更新请求
*/
export interface CommandSnippetUpdateRequest extends CommandSnippetCreateRequest {
id?: number;
}
/**
* 命令片段查询响应
*/
export interface CommandSnippetQueryResponse extends CommandSnippetQueryResponseExtra {
id: number;
groupId: number;
name: string;
command: string;
}
export interface CommandSnippetQueryResponseExtra {
visible: boolean;
expand?: boolean;
}
/**
* 命令片段查询响应
*/
export interface CommandSnippetWrapperResponse {
groups: Array<CommandSnippetGroupQueryResponse>;
ungroupedItems: Array<CommandSnippetQueryResponse>;
}
/**
* 创建命令片段
*/
export function createCommandSnippet(request: CommandSnippetCreateRequest) {
return axios.post('/asset/command-snippet/create', request);
}
/**
* 更新命令片段
*/
export function updateCommandSnippet(request: CommandSnippetUpdateRequest) {
return axios.put('/asset/command-snippet/update', request);
}
/**
* 查询全部命令片段
*/
export function getCommandSnippetList() {
return axios.get<CommandSnippetWrapperResponse>('/asset/command-snippet/list');
}
/**
* 删除命令片段
*/
export function deleteCommandSnippet(id: number) {
return axios.delete('/asset/command-snippet/delete', { params: { id } });
}

View File

@@ -0,0 +1,52 @@
import axios from 'axios';
/**
* 主机配置请求
*/
export interface HostConfigRequest {
hostId?: number;
type?: string;
version?: number;
status?: number;
config?: string;
}
/**
* 主机配置查询响应
*/
export interface HostConfigQueryResponse {
id: number;
hostId: number;
type: string;
version: number;
status: number;
config: Record<string, any>;
}
/**
* 查询主机配置
*/
export function getHostConfig(params: HostConfigRequest) {
return axios.get<HostConfigQueryResponse>('/asset/host-config/get', { params });
}
/**
* 查询全部主机配置
*/
export function getHostConfigList(hostId: number) {
return axios.get<Array<HostConfigQueryResponse>>('/asset/host-config/list', { params: { hostId } });
}
/**
* 更新主机配置
*/
export function updateHostConfig(request: HostConfigRequest) {
return axios.put('/asset/host-config/update', request);
}
/**
* 更新主机配置状态
*/
export function updateHostConfigStatus(request: HostConfigRequest) {
return axios.put('/asset/host-config/update-status', request);
}

View File

@@ -0,0 +1,106 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
import qs from 'query-string';
/**
* 主机连接日志查询请求
*/
export interface HostConnectLogQueryRequest extends Pagination {
id?: number;
userId?: number;
hostId?: number;
hostAddress?: string;
type?: string;
token?: string;
status?: string;
startTimeRange?: string[];
}
/**
* 主机连接日志查询响应
*/
export interface HostConnectLogQueryResponse extends TableData {
id: number;
userId: number;
username: number;
hostId: number;
hostName: string;
hostAddress: string;
type: string;
token: string;
status: string;
startTime: number;
endTime: number;
extra: HostConnectLogExtra;
}
/**
* 主机连接日志拓展对象
*/
export interface HostConnectLogExtra {
traceId: string;
channelId: string;
sessionId: string;
address: string;
location: string;
userAgent: string;
errorMessage: string;
}
/**
* 分页查询主机连接日志
*/
export function getHostConnectLogPage(request: HostConnectLogQueryRequest) {
return axios.post<DataGrid<HostConnectLogQueryResponse>>('/asset/host-connect-log/query', request);
}
/**
* 查询全部主机连接会话
*/
export function getHostConnectSessions(request: HostConnectLogQueryRequest) {
return axios.post<Array<HostConnectLogQueryResponse>>('/asset/host-connect-log/session', request);
}
/**
* 查询用户最近连接的主机
*/
export function getLatestConnectHostId(type: string, limit: number) {
return axios.post<Array<number>>('/asset/host-connect-log/latest-connect', {
type,
limit
});
}
/**
* 删除主机连接日志
*/
export function deleteHostConnectLog(idList: Array<number>) {
return axios.delete('/asset/host-connect-log/delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 查询主机连接日志数量
*/
export function getHostConnectLogCount(request: HostConnectLogQueryRequest) {
return axios.post<number>('/asset/host-connect-log/query-count', request);
}
/**
* 清空主机连接日志
*/
export function clearHostConnectLog(request: HostConnectLogQueryRequest) {
return axios.post<number>('/asset/host-connect-log/clear', request);
}
/**
* 强制断开主机连接
*/
export function hostForceOffline(request: HostConnectLogQueryRequest) {
return axios.put('/asset/host-connect-log/force-offline', request);
}

View File

@@ -0,0 +1,48 @@
import axios from 'axios';
/**
* 主机别名修改请求
*/
export interface HostAliasUpdateRequest {
id?: number;
name?: string;
}
/**
* 主机拓展信息查询请求
*/
export interface HostExtraQueryRequest {
hostId?: number;
item: string;
items?: Array<string>;
}
/**
* 主机拓展信息更新请求
*/
export interface HostExtraUpdateRequest {
hostId?: number;
item: string;
extra: string;
}
/**
* 获取主机拓展信息
*/
export function getHostExtraItem<T>(params: HostExtraQueryRequest) {
return axios.get<T>('/asset/host-extra/get', { params });
}
/**
* 获取多个主机拓展信息
*/
export function getHostExtraItemList(request: HostExtraQueryRequest) {
return axios.post<Record<string, Record<string, any>>>('/asset/host-extra/list', request);
}
/**
* 修改主机拓展信息
*/
export function updateHostExtra(request: HostExtraUpdateRequest) {
return axios.put('/asset/host-extra/update', request);
}

View File

@@ -0,0 +1,93 @@
import axios from 'axios';
/**
* 主机分组创建请求
*/
export interface HostGroupCreateRequest {
parentId?: number;
name?: string;
}
/**
* 主机分组重命名请求
*/
export interface HostGroupRenameRequest {
id?: number;
name?: string;
}
/**
* 主机分组移动请求
*/
export interface HostGroupMoveRequest {
id?: number;
targetId?: number;
position?: number;
}
/**
* 主机分组查询响应
*/
export interface HostGroupQueryResponse {
key: number;
parentId: number;
title: string;
children: Array<HostGroupQueryResponse>;
}
/**
* 分组内主机修改请求
*/
export interface HostGroupRelUpdateRequest {
groupId?: number;
hostIdList?: Array<string>;
}
/**
* 创建主机分组
*/
export function createHostGroup(request: HostGroupCreateRequest) {
return axios.post<number>('/asset/host-group/create', request);
}
/**
* 更新主机分组名称
*/
export function updateHostGroupName(request: HostGroupRenameRequest) {
return axios.put('/asset/host-group/rename', request);
}
/**
* 移动主机分组
*/
export function moveHostGroup(request: HostGroupMoveRequest) {
return axios.put('/asset/host-group/move', request);
}
/**
* 查询主机分组树
*/
export function getHostGroupTree() {
return axios.get<Array<HostGroupQueryResponse>>('/asset/host-group/tree');
}
/**
* 删除主机分组
*/
export function deleteHostGroup(id: number) {
return axios.delete('/asset/host-group/delete', { params: { id } });
}
/**
* 查询分组内主机
*/
export function getHostGroupRelList(groupId: number) {
return axios.get<Array<number>>('/asset/host-group/rel-list', { params: { groupId } });
}
/**
* 修改分组内主机
*/
export function updateHostGroupRel(request: HostGroupRelUpdateRequest) {
return axios.put('/asset/host-group/update-rel', request);
}

View File

@@ -0,0 +1,93 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
/**
* 主机身份创建请求
*/
export interface HostIdentityCreateRequest {
name?: string;
type?: string;
username?: string;
password?: string;
keyId?: number;
}
/**
* 主机身份更新请求
*/
export interface HostIdentityUpdateRequest extends HostIdentityCreateRequest {
id?: number;
useNewPassword?: boolean;
}
/**
* 主机身份查询请求
*/
export interface HostIdentityQueryRequest extends Pagination {
searchValue?: string;
id?: number;
name?: string;
type?: string;
username?: string;
keyId?: number;
}
/**
* 主机身份查询响应
*/
export interface HostIdentityQueryResponse extends TableData {
id: number;
name: string;
type: string;
username: string;
password: string;
keyId: number;
createTime: number;
updateTime: number;
creator: string;
updater: string;
}
/**
* 创建主机身份
*/
export function createHostIdentity(request: HostIdentityCreateRequest) {
return axios.post('/asset/host-identity/create', request);
}
/**
* 通过 id 更新主机身份
*/
export function updateHostIdentity(request: HostIdentityUpdateRequest) {
return axios.put('/asset/host-identity/update', request);
}
/**
* 通过 id 查询主机身份
*/
export function getHostIdentity(id: number) {
return axios.get<HostIdentityQueryResponse>('/asset/host-identity/get', { params: { id } });
}
/**
* 查询主机身份
*/
export function getHostIdentityList() {
return axios.get<Array<HostIdentityQueryResponse>>('/asset/host-identity/list');
}
/**
* 分页查询主机身份
*/
export function getHostIdentityPage(request: HostIdentityQueryRequest) {
return axios.post<DataGrid<HostIdentityQueryResponse>>('/asset/host-identity/query', request);
}
/**
* 通过 id 删除主机身份
*/
export function deleteHostIdentity(id: number) {
return axios.delete('/asset/host-identity/delete', { params: { id } });
}

View File

@@ -0,0 +1,87 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
/**
* 主机秘钥创建请求
*/
export interface HostKeyCreateRequest {
name?: string;
publicKey?: string;
privateKey?: string;
password?: string;
}
/**
* 主机秘钥更新请求
*/
export interface HostKeyUpdateRequest extends HostKeyCreateRequest {
id?: number;
useNewPassword?: boolean;
}
/**
* 主机秘钥查询请求
*/
export interface HostKeyQueryRequest extends Pagination {
searchValue?: string;
id?: number;
name?: string;
publicKey?: string;
privateKey?: string;
}
/**
* 主机秘钥查询响应
*/
export interface HostKeyQueryResponse extends TableData {
id: number;
name: string;
publicKey: string;
privateKey: string;
password: string;
createTime: number;
updateTime: number;
}
/**
* 创建主机秘钥
*/
export function createHostKey(request: HostKeyCreateRequest) {
return axios.post('/asset/host-key/create', request);
}
/**
* 通过 id 更新主机秘钥
*/
export function updateHostKey(request: HostKeyUpdateRequest) {
return axios.put('/asset/host-key/update', request);
}
/**
* 通过 id 查询主机秘钥
*/
export function getHostKey(id: number) {
return axios.get<HostKeyQueryResponse>('/asset/host-key/get', { params: { id } });
}
/**
* 查询主机秘钥
*/
export function getHostKeyList() {
return axios.get<Array<HostKeyQueryResponse>>('/asset/host-key/list');
}
/**
* 分页查询主机秘钥
*/
export function getHostKeyPage(request: HostKeyQueryRequest) {
return axios.post<DataGrid<HostKeyQueryResponse>>('/asset/host-key/query', request);
}
/**
* 通过 id 删除主机秘钥
*/
export function deleteHostKey(id: number) {
return axios.delete('/asset/host-key/delete', { params: { id } });
}

View File

@@ -0,0 +1,62 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
import qs from 'query-string';
/**
* SFTP 操作日志 查询请求
*/
export interface HostSftpLogQueryRequest extends Pagination {
userId?: number;
hostId?: number;
type?: string;
result?: number;
startTimeRange?: string[];
}
/**
* SFTP 操作日志 查询响应
*/
export interface HostSftpLogQueryResponse extends TableData {
id: number;
userId: number;
username: number;
hostId: number;
hostName: string;
hostAddress: string;
address: string;
location: string;
userAgent: string;
paths: string[];
type: string;
result: string;
startTime: number;
extra: HostSftpLogExtra;
}
/**
* SFTP 操作日志 拓展对象
*/
export interface HostSftpLogExtra {
mod: number;
target: string;
}
/**
* 分页查询 SFTP 操作日志
*/
export function getHostSftpLogPage(request: HostSftpLogQueryRequest) {
return axios.post<DataGrid<HostSftpLogQueryResponse>>('/asset/host-sftp-log/query', request);
}
/**
* 删除 SFTP 操作日志
*/
export function deleteHostSftpLog(idList: Array<number>) {
return axios.delete('/asset/host-sftp-log/delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}

View File

@@ -0,0 +1,66 @@
import axios from 'axios';
import { createAppWebSocket } from '@/utils/http';
// 终端主题
export interface TerminalTheme {
name: string;
dark: boolean;
schema: TerminalThemeSchema;
}
// 终端主题 schema
export interface TerminalThemeSchema {
background: string;
foreground: string;
cursor: string;
cursorAccent?: string;
selectionBackground?: string;
selectionForeground?: string;
selectionInactiveBackground?: string;
black: string;
red: string;
green: string;
yellow: string;
blue: string;
magenta: string;
cyan: string;
white: string;
brightBlack: string;
brightRed: string;
brightGreen: string;
brightYellow: string;
brightBlue: string;
brightMagenta: string;
brightCyan: string;
brightWhite: string;
[key: string]: unknown;
}
/**
* 获取主机终端主题
*/
export function getTerminalThemes() {
return axios.get<Array<TerminalTheme>>('/asset/host-terminal/themes');
}
/**
* 获取主机终端 accessToken
*/
export function getTerminalAccessToken() {
return axios.get<string>('/asset/host-terminal/access');
}
/**
* 打开主机终端 websocket
*/
export const openHostTerminalChannel = (accessToken: string) => {
return createAppWebSocket(`/host/terminal/${accessToken}`);
};
/**
* 打开主机传输 websocket
*/
export const openHostTransferChannel = (accessToken: string) => {
return createAppWebSocket(`/host/transfer/${accessToken}`);
};

View File

@@ -0,0 +1,104 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
/**
* 主机创建请求
*/
export interface HostCreateRequest {
name?: string;
code?: string;
address?: string;
tags?: Array<number>;
groupIdList?: Array<number>;
}
/**
* 主机更新请求
*/
export interface HostUpdateRequest extends HostCreateRequest {
id?: number;
}
/**
* 主机查询请求
*/
export interface HostQueryRequest extends Pagination {
searchValue?: string;
id?: number;
name?: string;
code?: string;
address?: string;
tags?: Array<number>;
queryTag?: boolean;
}
/**
* 主机查询响应
*/
export interface HostQueryResponse extends TableData, HostQueryResponseExtra {
id: number;
name: string;
code: string;
address: string;
createTime: number;
updateTime: number;
creator: string;
updater: string;
favorite: boolean;
alias: string;
color: string;
tags: Array<{ id: number, name: string }>;
groupIdList: Array<number>;
}
/**
* 主机操作拓展
*/
export interface HostQueryResponseExtra {
editable: boolean;
loading: boolean;
modCount: number;
}
/**
* 创建主机
*/
export function createHost(request: HostCreateRequest) {
return axios.post('/asset/host/create', request);
}
/**
* 通过 id 更新主机
*/
export function updateHost(request: HostUpdateRequest) {
return axios.put('/asset/host/update', request);
}
/**
* 通过 id 查询主机
*/
export function getHost(id: number) {
return axios.get<HostQueryResponse>('/asset/host/get', { params: { id } });
}
/**
* 查询全部主机
*/
export function getHostList() {
return axios.get<Array<HostQueryResponse>>('/asset/host/list');
}
/**
* 分页查询主机
*/
export function getHostPage(request: HostQueryRequest) {
return axios.post<DataGrid<HostQueryResponse>>('/asset/host/query', request);
}
/**
* 通过 id 删除主机
*/
export function deleteHost(id: number) {
return axios.delete('/asset/host/delete', { params: { id } });
}

View File

@@ -0,0 +1,54 @@
import type { PathBookmarkQueryResponse } from './path-bookmark';
import axios from 'axios';
/**
* 路径书签分组创建请求
*/
export interface PathBookmarkGroupCreateRequest {
name?: string;
}
/**
* 路径书签分组更新请求
*/
export interface PathBookmarkGroupUpdateRequest extends PathBookmarkGroupCreateRequest {
id?: number;
}
/**
* 路径书签分组查询响应
*/
export interface PathBookmarkGroupQueryResponse {
id: number;
name: string;
items: Array<PathBookmarkQueryResponse>;
}
/**
* 创建路径书签分组
*/
export function createPathBookmarkGroup(request: PathBookmarkGroupCreateRequest) {
return axios.post('/asset/path-bookmark-group/create', request);
}
/**
* 更新路径书签分组
*/
export function updatePathBookmarkGroup(request: PathBookmarkGroupUpdateRequest) {
return axios.put('/asset/path-bookmark-group/update', request);
}
/**
* 查询全部路径书签分组
*/
export function getPathBookmarkGroupList() {
return axios.get<Array<PathBookmarkGroupQueryResponse>>('/asset/path-bookmark-group/list');
}
/**
* 删除路径书签分组
*/
export function deletePathBookmarkGroup(id: number) {
return axios.delete('/asset/path-bookmark-group/delete', { params: { id } });
}

View File

@@ -0,0 +1,71 @@
import { PathBookmarkGroupQueryResponse } from '@/api/asset/path-bookmark-group';
import axios from 'axios';
/**
* 路径标签创建请求
*/
export interface PathBookmarkCreateRequest {
groupId?: number;
name?: string;
type?: string;
path?: string;
}
/**
* 路径标签更新请求
*/
export interface PathBookmarkUpdateRequest extends PathBookmarkCreateRequest {
id?: number;
}
/**
* 路径标签查询响应
*/
export interface PathBookmarkQueryResponse extends PathBookmarkQueryResponseExtra {
id: number;
groupId: number;
name: string;
type: string;
path: string;
}
export interface PathBookmarkQueryResponseExtra {
visible: boolean;
expand?: boolean;
}
/**
* 路径标签查询响应
*/
export interface PathBookmarkWrapperResponse {
groups: Array<PathBookmarkGroupQueryResponse>;
ungroupedItems: Array<PathBookmarkQueryResponse>;
}
/**
* 创建路径标签
*/
export function createPathBookmark(request: PathBookmarkCreateRequest) {
return axios.post('/asset/path-bookmark/create', request);
}
/**
* 更新路径标签
*/
export function updatePathBookmark(request: PathBookmarkUpdateRequest) {
return axios.put('/asset/path-bookmark/update', request);
}
/**
* 分页查询路径标签
*/
export function getPathBookmarkList() {
return axios.get<PathBookmarkWrapperResponse>('/asset/path-bookmark/list');
}
/**
* 删除路径标签
*/
export function deletePathBookmark(id: number) {
return axios.delete('/asset/path-bookmark/delete', { params: { id } });
}

View File

@@ -0,0 +1,22 @@
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
export interface ContentDataRecord {
x: string;
y: number;
}
export function queryContentData() {
return axios.get<ContentDataRecord[]>('/api/content-data');
}
export interface PopularRecord {
key: number;
clickNumber: string;
title: string;
increases: number;
}
export function queryPopularList(params: { type: string }) {
return axios.get<TableData[]>('/api/popular/list', { params });
}

View File

@@ -0,0 +1,119 @@
import type { DataGrid } from '@/types/global';
import type {
ExecHostLogQueryResponse,
ExecLogInterruptRequest,
ExecLogQueryRequest,
ExecLogQueryResponse,
ExecLogStatusResponse,
ExecLogTailRequest
} from './exec-log';
import axios from 'axios';
import qs from 'query-string';
/**
* 分页查询批量执行日志
*/
export function getExecCommandLogPage(request: ExecLogQueryRequest) {
return axios.post<DataGrid<ExecLogQueryResponse>>('/asset/exec-command-log/query', request);
}
/**
* 查询批量执行日志
*/
export function getExecCommandLog(id: number) {
return axios.get<ExecLogQueryResponse>('/asset/exec-command-log/get', { params: { id } });
}
/**
* 查询主机批量执行日志
*/
export function getExecCommandHostLogList(logId: number) {
return axios.get<Array<ExecHostLogQueryResponse>>('/asset/exec-command-log/host-list', { params: { logId } });
}
/**
* 查询命令执行状态
*/
export function getExecCommandLogStatus(idList: Array<number>) {
return axios.get<ExecLogStatusResponse>('/asset/exec-command-log/status', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 查询历史批量执行日志
*/
export function getExecCommandLogHistory(limit: number) {
return axios.get<Array<ExecLogQueryResponse>>('/asset/exec-command-log/history', { params: { page: 1, limit } });
}
/**
* 删除批量执行日志
*/
export function deleteExecCommandLog(id: number) {
return axios.delete('/asset/exec-command-log/delete', { params: { id } });
}
/**
* 批量删除批量执行日志
*/
export function batchDeleteExecCommandLog(idList: Array<number>) {
return axios.delete('/asset/exec-command-log/batch-delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 删除主机批量执行日志
*/
export function deleteExecCommandHostLog(id: number) {
return axios.delete('/asset/exec-command-log/delete-host', { params: { id } });
}
/**
* 查询批量执行日志数量
*/
export function getExecCommandLogCount(request: ExecLogQueryRequest) {
return axios.post<number>('/asset/exec-command-log/query-count', request);
}
/**
* 清空批量执行日志
*/
export function clearExecCommandLog(request: ExecLogQueryRequest) {
return axios.post<number>('/asset/exec-command-log/clear', request);
}
/**
* 查看批量执行日志
*/
export function getExecCommandLogTailToken(request: ExecLogTailRequest) {
return axios.post<string>('/asset/exec-command-log/tail', request);
}
/**
* 下载批量执行日志文件
*/
export function downloadExecCommandLogFile(id: number) {
return axios.get('/asset/exec-command-log/download', { unwrap: true, params: { id } });
}
/**
* 中断执行命令
*/
export function interruptExecCommand(request: ExecLogInterruptRequest) {
return axios.put('/asset/exec-command-log/interrupt', request);
}
/**
* 中断执行主机命令
*/
export function interruptHostExecCommand(request: ExecLogInterruptRequest) {
return axios.put('/asset/exec-command-log/interrupt-host', request);
}

View File

@@ -0,0 +1,29 @@
import type { ExecLogQueryResponse } from './exec-log';
import axios from 'axios';
/**
* 执行命令请求
*/
export interface ExecCommandRequest {
logId?: number;
description?: string;
timeout?: number;
scriptExec?: number;
command?: string;
parameterSchema?: string;
hostIdList?: Array<number>;
}
/**
* 批量执行命令
*/
export function batchExecCommand(request: ExecCommandRequest) {
return axios.post<ExecLogQueryResponse>('/asset/exec-command/exec', request);
}
/**
* 重新执行命令
*/
export function reExecCommand(request: ExecCommandRequest) {
return axios.post<ExecLogQueryResponse>('/asset/exec-command/re-exec', request);
}

View File

@@ -0,0 +1,92 @@
import type { Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import { createAppWebSocket } from '@/utils/http';
/**
* 执行日志查询请求
*/
export interface ExecLogQueryRequest extends Pagination {
id?: number;
userId?: number;
sourceId?: number;
description?: string;
command?: string;
status?: string;
startTimeRange?: string[];
}
/**
* 执行日志查询响应
*/
export interface ExecLogQueryResponse extends TableData, ExecLogQueryExtraResponse {
id: number;
userId: number;
username: string;
description: string;
execSeq: number;
command: string;
parameterSchema: string;
timeout: number;
scriptExec?: number;
status: string;
startTime: number;
finishTime: number;
hostIdList: Array<number>;
hosts: Array<ExecHostLogQueryResponse>;
}
/**
* 执行日志查询响应 拓展
*/
export interface ExecLogQueryExtraResponse {
hosts: Array<ExecHostLogQueryResponse>;
}
/**
* 主机执行日志查询响应
*/
export interface ExecHostLogQueryResponse extends TableData {
id: number;
logId: number;
hostId: number;
hostName: string;
hostAddress: string;
status: string;
command: string;
parameter: string;
exitCode: number;
errorMessage: string;
startTime: number;
finishTime: number;
}
/**
* 执行状态查询响应
*/
export interface ExecLogStatusResponse {
logList: Array<ExecLogQueryResponse>;
hostList: Array<ExecHostLogQueryResponse>;
}
/**
* 执行日志 tail 请求
*/
export interface ExecLogTailRequest {
execId?: number;
hostExecIdList?: Array<number>;
}
/**
* 执行中断命令请求
*/
export interface ExecLogInterruptRequest {
logId?: number;
hostLogId?: number;
}
/**
* 打开执行日志 websocket
*/
export const openExecLogChannel = (token: string) => {
return createAppWebSocket(`/exec/log/${token}`);
};

View File

@@ -0,0 +1,90 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
/**
* 执行模板创建请求
*/
export interface ExecTemplateCreateRequest {
name?: string;
command?: string;
timeout?: number;
scriptExec?: number;
parameterSchema?: string;
hostIdList?: Array<number>;
}
/**
* 执行模板更新请求
*/
export interface ExecTemplateUpdateRequest extends ExecTemplateCreateRequest {
id?: number;
}
/**
* 执行模板查询请求
*/
export interface ExecTemplateQueryRequest extends Pagination {
id?: number;
name?: string;
command?: string;
}
/**
* 执行模板查询响应
*/
export interface ExecTemplateQueryResponse extends TableData {
id: number;
name: string;
command: string;
timeout: number;
scriptExec?: number;
parameterSchema: string;
createTime: number;
updateTime: number;
creator: string;
updater: string;
hostIdList?: Array<number>;
}
/**
* 创建执行模板
*/
export function createExecTemplate(request: ExecTemplateCreateRequest) {
return axios.post('/asset/exec-template/create', request);
}
/**
* 更新执行模板
*/
export function updateExecTemplate(request: ExecTemplateUpdateRequest) {
return axios.put('/asset/exec-template/update', request);
}
/**
* 查询执行模板
*/
export function getExecTemplate(id: number) {
return axios.get<ExecTemplateQueryResponse>('/asset/exec-template/get', { params: { id } });
}
/**
* 查询执行模板
*/
export function getExecTemplateWithAuthorized(id: number) {
return axios.get<ExecTemplateQueryResponse>('/asset/exec-template/get-with-authorized', { params: { id } });
}
/**
* 分页查询执行模板
*/
export function getExecTemplatePage(request: ExecTemplateQueryRequest) {
return axios.post<DataGrid<ExecTemplateQueryResponse>>('/asset/exec-template/query', request);
}
/**
* 删除执行模板
*/
export function deleteExecTemplate(id: number) {
return axios.delete('/asset/exec-template/delete', { params: { id } });
}

View File

@@ -0,0 +1,180 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
import qs from 'query-string';
/**
* 上传任务创建请求
*/
export interface UploadTaskCreateRequest {
remotePath?: string;
description?: string;
hostIdList?: Array<number>;
files?: Array<UploadTaskFileCreateRequest>;
}
/**
* 上传任务文件创建请求
*/
export interface UploadTaskFileCreateRequest {
fileId?: string;
filePath?: string;
fileSize?: number;
}
/**
* 上传任务创建响应
*/
export interface UploadTaskCreateResponse {
id: number;
token: string;
}
/**
* 上传任务查询请求
*/
export interface UploadTaskQueryRequest extends Pagination {
id?: number;
userId?: number;
remotePath?: string;
description?: string;
status?: string;
createTimeRange?: string[];
}
/**
* 上传任务查询响应
*/
export interface UploadTaskQueryResponse extends TableData {
id: number;
userId: number;
username: string;
remotePath: string;
description: string;
status: string;
extraInfo: string;
fileCount: number;
hostCount: number;
startTime: number;
endTime: number;
createTime: number;
hosts: Array<UploadTaskHost>;
}
/**
* 上传任务主机响应
*/
export interface UploadTaskHost {
id: number;
code: string;
name: string;
address: string;
files: Array<UploadTaskFile>;
}
/**
* 上传任务文件响应
*/
export interface UploadTaskFile {
id: number;
taskId: number;
hostId: number;
fileId: string;
filePath: string;
fileSize: number;
status: string;
startTime: number;
endTime: number;
current: number;
}
/**
* 上传任务状态响应
*/
export interface UploadTaskStatusResponse extends TableData {
id: number;
status: string;
startTime: number;
endTime: number;
files: Array<UploadTaskFile>;
}
/**
* 创建上传任务
*/
export function createUploadTask(request: UploadTaskCreateRequest) {
return axios.post<UploadTaskCreateResponse>('/asset/upload-task/create', request);
}
/**
* 创建上传任务
*/
export function startUploadTask(id: number) {
return axios.post('/asset/upload-task/start', { id });
}
/**
* 创建上传任务
*/
export function cancelUploadTask(id: number, failed: boolean) {
return axios.post('/asset/upload-task/cancel', { id, failed });
}
/**
* 查询上传任务
*/
export function getUploadTask(id: number) {
return axios.get<UploadTaskQueryResponse>('/asset/upload-task/get', { params: { id } });
}
/**
* 分页查询上传任务
*/
export function getUploadTaskPage(request: UploadTaskQueryRequest) {
return axios.post<DataGrid<UploadTaskQueryResponse>>('/asset/upload-task/query', request);
}
/**
* 查询上传任务状态
*/
export function getUploadTaskStatus(idList: Array<number>, queryFiles: boolean) {
return axios.get<Array<UploadTaskStatusResponse>>('/asset/upload-task/status', {
params: { idList, queryFiles },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 删除上传任务
*/
export function deleteUploadTask(id: number) {
return axios.delete('/asset/upload-task/delete', { params: { id } });
}
/**
* 批量删除上传任务
*/
export function batchDeleteUploadTask(idList: Array<number>) {
return axios.delete('/asset/upload-task/batch-delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 查询主机连接日志数量
*/
export function getUploadTaskCount(request: UploadTaskQueryRequest) {
return axios.post<number>('/asset/upload-task/query-count', request);
}
/**
* 清空主机连接日志
*/
export function clearUploadTask(request: UploadTaskQueryRequest) {
return axios.post<number>('/asset/upload-task/clear', request);
}

View File

@@ -0,0 +1,85 @@
import type { AxiosRequestConfig, AxiosResponse } from 'axios';
import axios from 'axios';
import { Message } from '@arco-design/web-vue';
import { useUserStore } from '@/store';
import { getToken } from '@/utils/auth';
import { httpBaseUrl } from '@/utils/env';
import { reLoginTipsKey } from '@/types/symbol';
export interface HttpResponse<T = unknown> {
msg: string;
code: number;
data: T;
}
axios.defaults.timeout = 10000;
axios.defaults.promptBizErrorMessage = true;
axios.defaults.baseURL = httpBaseUrl;
axios.interceptors.request.use(
(config: AxiosRequestConfig) => {
// 获取 token
const token = getToken();
if (token) {
if (!config.headers) {
config.headers = {};
}
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
axios.interceptors.response.use(
(response: AxiosResponse<HttpResponse>) => {
// 不转换
if (response.config.unwrap) {
return response;
}
const res = response.data;
const { code } = res;
// 200 成功
if (code === 200) {
return res;
}
// 异常判断
if ([401, 700, 701, 702].includes(code)) {
// 提示
Message.error({
content: res.msg || 'Error',
duration: 5 * 1000,
});
// 认证异常
setTimeout(async () => {
// 先判断是否有提示 防止调用多个接口 把主要信息覆盖
if (!window.sessionStorage.getItem(reLoginTipsKey)) {
// 设置错误信息 在登录页面重新提示 因为重新页面加载会刷掉提示
window.sessionStorage.setItem(reLoginTipsKey, res.msg);
}
// 登出
await useUserStore().logout();
// 重新加载自动跳转登录页面
window.location.reload();
});
} else {
// 其他异常 判断是否弹出错误信息
if (response.config.promptBizErrorMessage) {
Message.error({
content: res.msg || 'Error',
duration: 5 * 1000,
});
}
}
return Promise.reject(new Error(res.msg || 'Error'));
},
(error) => {
Message.error({
content: error.msg || '请求失败',
duration: 5 * 1000,
});
return Promise.reject(error);
}
);

View File

@@ -0,0 +1,112 @@
import type { DataGrid } from '@/types/global';
import type {
ExecHostLogQueryResponse,
ExecLogQueryRequest,
ExecLogQueryResponse,
ExecLogStatusResponse,
ExecLogTailRequest,
ExecLogInterruptRequest
} from '../exec/exec-log';
import axios from 'axios';
import qs from 'query-string';
/**
* 分页查询计划任务日志
*/
export function getExecJobLogPage(request: ExecLogQueryRequest) {
return axios.post<DataGrid<ExecLogQueryResponse>>('/asset/exec-job-log/query', request);
}
/**
* 查询计划任务日志
*/
export function getExecJobLog(id: number) {
return axios.get<ExecLogQueryResponse>('/asset/exec-job-log/get', { params: { id } });
}
/**
* 查询主机计划任务日志
*/
export function getExecJobHostLogList(logId: number) {
return axios.get<Array<ExecHostLogQueryResponse>>('/asset/exec-job-log/host-list', { params: { logId } });
}
/**
* 查询命令执行状态
*/
export function getExecJobLogStatus(idList: Array<number>) {
return axios.get<ExecLogStatusResponse>('/asset/exec-job-log/status', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 删除计划任务日志
*/
export function deleteExecJobLog(id: number) {
return axios.delete('/asset/exec-job-log/delete', { params: { id } });
}
/**
* 批量删除计划任务日志
*/
export function batchDeleteExecJobLog(idList: Array<number>) {
return axios.delete('/asset/exec-job-log/batch-delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 删除主机计划任务日志
*/
export function deleteExecJobHostLog(id: number) {
return axios.delete('/asset/exec-job-log/delete-host', { params: { id } });
}
/**
* 查询计划任务日志数量
*/
export function getExecJobLogCount(request: ExecLogQueryRequest) {
return axios.post<number>('/asset/exec-job-log/query-count', request);
}
/**
* 清空计划任务日志
*/
export function clearExecJobLog(request: ExecLogQueryRequest) {
return axios.post<number>('/asset/exec-job-log/clear', request);
}
/**
* 查看计划任务日志
*/
export function getExecJobLogTailToken(request: ExecLogTailRequest) {
return axios.post<string>('/asset/exec-job-log/tail', request);
}
/**
* 下载计划任务日志文件
*/
export function downloadExecJobLogFile(id: number) {
return axios.get('/asset/exec-job-log/download', { unwrap: true, params: { id } });
}
/**
* 中断计划任务执行
*/
export function interruptExecJob(request: ExecLogInterruptRequest) {
return axios.put('/asset/exec-job-log/interrupt', request);
}
/**
* 中断计划任务执行主机
*/
export function interruptHostExecJob(request: ExecLogInterruptRequest) {
return axios.put('/asset/exec-job-log/interrupt-host', request);
}

View File

@@ -0,0 +1,120 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import type { HostQueryResponse } from '@/api/asset/host';
import axios from 'axios';
/**
* 计划任务创建请求
*/
export interface ExecJobCreateRequest {
name?: string;
expression?: string;
timeout?: number;
scriptExec?: number;
command?: string;
parameterSchema?: string;
hostIdList?: Array<number>;
}
/**
* 计划任务更新请求
*/
export interface ExecJobUpdateRequest extends ExecJobCreateRequest {
id?: number;
}
/**
* 计划任务状态更新请求
*/
export interface ExecJobUpdateStatusRequest {
id: number;
status: number;
}
/**
* 计划任务查询请求
*/
export interface ExecJobQueryRequest extends Pagination {
id?: number;
name?: string;
command?: string;
status?: number;
queryRecentLog?: boolean;
}
/**
* 计划任务查询响应
*/
export interface ExecJobQueryResponse extends TableData {
id: number;
name: string;
expression: string;
timeout: number;
scriptExec?: number;
command: string;
parameterSchema: string;
status: number;
recentLogId: number;
recentLogStatus: string;
recentLogTime: number;
createTime: number;
updateTime: number;
hostIdList: Array<number>;
hostList: Array<HostQueryResponse>;
}
/**
* 创建计划任务
*/
export function createExecJob(request: ExecJobCreateRequest) {
return axios.post('/asset/exec-job/create', request);
}
/**
* 更新计划任务
*/
export function updateExecJob(request: ExecJobUpdateRequest) {
return axios.put('/asset/exec-job/update', request);
}
/**
* 更新计划任务状态
*/
export function updateExecJobStatus(request: ExecJobUpdateStatusRequest) {
return axios.put('/asset/exec-job/update-status', request);
}
/**
* 查询计划任务
*/
export function getExecJob(id: number) {
return axios.get<ExecJobQueryResponse>('/asset/exec-job/get', { params: { id } });
}
/**
* 查询全部计划任务
*/
export function getExecJobList() {
return axios.get<Array<ExecJobQueryResponse>>('/asset/exec-job/list');
}
/**
* 分页查询计划任务
*/
export function getExecJobPage(request: ExecJobQueryRequest) {
return axios.post<DataGrid<ExecJobQueryResponse>>('/asset/exec-job/query', request);
}
/**
* 删除计划任务
*/
export function deleteExecJob(id: number) {
return axios.delete('/asset/exec-job/delete', { params: { id } });
}
/**
* 手动触发计划任务
*/
export function triggerExecJob(id: number) {
return axios.post('/asset/exec-job/trigger', { id });
}

View File

@@ -0,0 +1,24 @@
import axios from 'axios';
/**
* cron 下次执行时间请求对象
*/
export interface CronNextRequest {
expression: number;
times: string;
}
/**
* cron 下次执行时间响应对象
*/
export interface CronNextResponse {
valid: boolean;
next: Array<string>;
}
/**
* 获取 cron 下次执行时间
*/
export function getCronNextTime(request: CronNextRequest) {
return axios.get<CronNextResponse>('/infra/expression/cron-next', { params: request });
}

View File

@@ -0,0 +1,25 @@
import axios from 'axios';
export type FavoriteType = 'HOST'
/**
* 收藏操作对象
*/
export interface FavoriteOperatorRequest {
relId: number;
type: FavoriteType;
}
/**
* 添加收藏
*/
export function addFavorite(request: FavoriteOperatorRequest) {
return axios.put('/infra/favorite/add', request);
}
/**
* 取消收藏
*/
export function cancelFavorite(request: FavoriteOperatorRequest) {
return axios.put('/infra/favorite/cancel', request);
}

View File

@@ -0,0 +1,30 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
/**
* 历史归档查询请求
*/
export interface HistoryValueQueryRequest extends Pagination {
searchValue?: string;
relId?: number;
type?: string;
}
/**
* 历史归档查询响应
*/
export interface HistoryValueQueryResponse extends TableData {
id: number;
beforeValue: string;
afterValue: string;
createTime: number;
creator: string;
}
/**
* 分页查询历史归档
*/
export function getHistoryValuePage(request: HistoryValueQueryRequest) {
return axios.post<DataGrid<HistoryValueQueryResponse>>('/infra/history-value/query', request);
}

View File

@@ -0,0 +1,33 @@
import axios from 'axios';
export type TagType = 'HOST' | string
/**
* tag 创建对象
*/
export interface TagCreateRequest {
name: number;
type: TagType;
}
/**
* tag 响应对象
*/
export interface TagQueryResponse {
id: number;
name: string;
}
/**
* 创建标签
*/
export function createTag(request: TagCreateRequest) {
return axios.post('/infra/tag/create', request);
}
/**
* 查询标签
*/
export function getTagList(type: TagType) {
return axios.get<Array<TagQueryResponse>>('/infra/tag/list', { params: { type } });
}

View File

@@ -0,0 +1,96 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
import qs from 'query-string';
/**
* 字典配置项创建请求
*/
export interface DictKeyCreateRequest {
keyName?: string;
valueType?: string;
extraSchema?: string;
description?: string;
}
/**
* 字典配置项更新请求
*/
export interface DictKeyUpdateRequest extends DictKeyCreateRequest {
id?: number;
}
/**
* 字典配置项查询请求
*/
export interface DictKeyQueryRequest extends Pagination {
searchValue?: string;
id?: number;
keyName?: string;
description?: string;
}
/**
* 字典配置项查询响应
*/
export interface DictKeyQueryResponse extends TableData {
id: number;
keyName: string;
valueType: string;
extraSchema: string;
description: string;
}
/**
* 创建字典配置项
*/
export function createDictKey(request: DictKeyCreateRequest) {
return axios.post('/infra/dict-key/create', request);
}
/**
* 更新字典配置项
*/
export function updateDictKey(request: DictKeyUpdateRequest) {
return axios.put('/infra/dict-key/update', request);
}
/**
* 查询全部字典配置项
*/
export function getDictKeyList() {
return axios.post<Array<DictKeyQueryResponse>>('/infra/dict-key/list');
}
/**
* 分页查询字典配置项
*/
export function getDictKeyPage(request: DictKeyQueryRequest) {
return axios.post<DataGrid<DictKeyQueryResponse>>('/infra/dict-key/query', request);
}
/**
* 刷新字典缓存
*/
export function refreshCache() {
return axios.put('/infra/dict-key/refresh-cache');
}
/**
* 删除字典配置项
*/
export function deleteDictKey(id: number) {
return axios.delete('/infra/dict-key/delete', { params: { id } });
}
/**
* 批量删除字典配置项
*/
export function batchDeleteDictKey(idList: Array<number>) {
return axios.delete('/infra/dict-key/batch-delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}

View File

@@ -0,0 +1,125 @@
import type { DataGrid, Options, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
import qs from 'query-string';
/**
* 字典配置值创建请求
*/
export interface DictValueCreateRequest {
keyId?: number;
name?: string;
value?: string;
label?: string;
extra?: string;
sort?: number;
}
/**
* 字典配置值更新请求
*/
export interface DictValueUpdateRequest extends DictValueCreateRequest {
id?: number;
}
/**
* 字典配置值回滚请求
*/
export interface DictValueRollbackRequest {
id?: number;
valueId?: number;
}
/**
* 字典配置值查询请求
*/
export interface DictValueQueryRequest extends Pagination {
keyId?: number;
keyName?: string;
value?: string;
label?: string;
extra?: string;
}
/**
* 字典配置值查询响应
*/
export interface DictValueQueryResponse extends TableData {
id: number;
keyId: number;
keyName: string;
keyDescription: string;
value: string;
label: string;
extra: string;
sort: number;
createTime: number;
updateTime: number;
creator: string;
updater: string;
}
/**
* 字典配置值选项查询响应
*/
export interface DictValueOptionsQueryResponse extends Options {
}
/**
* 创建字典配置值
*/
export function createDictValue(request: DictValueCreateRequest) {
return axios.post('/infra/dict-value/create', request);
}
/**
* 更新字典配置值
*/
export function updateDictValue(request: DictValueUpdateRequest) {
return axios.put('/infra/dict-value/update', request);
}
/**
* 回滚字典配置值
*/
export function rollbackDictValue(request: DictValueRollbackRequest) {
return axios.put('/infra/dict-value/rollback', request);
}
/**
* 查询字典配置值
*/
export function getDictValueList(keys: string[]) {
return axios.get<Record<string, Array<DictValueOptionsQueryResponse>>>('/infra/dict-value/list', {
params: { keys },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 分页查询字典配置值
*/
export function getDictValuePage(request: DictValueQueryRequest) {
return axios.post<DataGrid<DictValueQueryResponse>>('/infra/dict-value/query', request);
}
/**
* 删除字典配置值
*/
export function deleteDictValue(id: number) {
return axios.delete('/infra/dict-value/delete', { params: { id } });
}
/**
* 批量删除字典配置值
*/
export function batchDeleteDictValue(idList: Array<number>) {
return axios.delete('/infra/dict-value/batch-delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}

View File

@@ -0,0 +1,97 @@
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
/**
* 菜单创建请求
*/
export interface MenuCreateRequest {
parentId?: number;
name?: string;
permission?: string;
type?: number;
sort?: number;
visible?: number;
cache?: number;
newWindow?: number;
icon?: string;
path?: string;
component?: string;
}
/**
* 菜单更新请求
*/
export interface MenuUpdateRequest extends MenuCreateRequest {
id?: number;
status?: number;
}
/**
* 菜单查询请求
*/
export interface MenuQueryRequest {
name?: string;
status?: number;
}
/**
* 菜单查询响应
*/
export interface MenuQueryResponse extends TableData {
id: number;
parentId: number;
name: string;
permission: string;
type: number;
sort: number;
visible: number;
status: number;
cache: number;
newWindow: number,
icon: string;
path: string;
component: string;
children: Array<MenuQueryResponse>;
}
/**
* 查询菜单列表
*/
export function getMenuList(request: MenuQueryRequest) {
return axios.post<MenuQueryResponse[]>('/infra/system-menu/list', request);
}
/**
* 创建菜单
*/
export function createMenu(request: MenuCreateRequest) {
return axios.post('/infra/system-menu/create', request);
}
/**
* 修改菜单
*/
export function updateMenu(request: MenuUpdateRequest) {
return axios.put<MenuQueryResponse[]>('/infra/system-menu/update', request);
}
/**
* 修改菜单状态
*/
export function updateMenuStatus(request: MenuUpdateRequest) {
return axios.put<MenuQueryResponse[]>('/infra/system-menu/update-status', request);
}
/**
* 删除菜单
*/
export function deleteMenu(id: number) {
return axios.delete<MenuQueryResponse[]>('/infra/system-menu/delete', { params: { id } });
}
/**
* 刷新缓存
*/
export function refreshCache() {
return axios.put('/infra/permission/refresh-cache');
}

View File

@@ -0,0 +1,75 @@
import axios from 'axios';
/**
* 系统消息查询请求
*/
export interface MessageQueryRequest {
limit?: number;
maxId?: number;
classify?: string;
queryUnread?: boolean;
}
/**
* 系统消息查询响应
*/
export interface MessageRecordResponse {
id: number;
classify: string;
type: string;
status: number;
relKey: string;
title: string;
content: string;
contentHtml: string;
createTime: number;
}
/**
* 查询系统消息列表
*/
export function getSystemMessageList(request: MessageQueryRequest) {
return axios.post<Array<MessageRecordResponse>>('/infra/system-message/list', request);
}
/**
* 查询系统消息数量
*/
export function getSystemMessageCount(queryUnread: boolean) {
return axios.get<Record<string, number>>('/infra/system-message/count', { params: { queryUnread } });
}
/**
* 查询是否有未读消息
*/
export function checkHasUnreadMessage() {
return axios.get<boolean>('/infra/system-message/has-unread');
}
/**
* 更新系统消息为已读
*/
export function updateSystemMessageRead(id: number) {
return axios.put('/infra/system-message/read', undefined, { params: { id } });
}
/**
* 更新全部系统消息为已读
*/
export function updateSystemMessageReadAll(classify: string) {
return axios.put('/infra/system-message/read-all', undefined, { params: { classify } });
}
/**
* 删除系统消息
*/
export function deleteSystemMessage(id: number) {
return axios.delete('/infra/system-message/delete', { params: { id } });
}
/**
* 清理已读的系统消息
*/
export function clearSystemMessage(classify: string) {
return axios.delete('/infra/system-message/clear', { params: { classify } });
}

View File

@@ -0,0 +1,8 @@
import { createAppWebSocket } from '@/utils/http';
/**
* 打开文件上传 websocket
*/
export const openFileUploadChannel = (uploadToken: string) => {
return createAppWebSocket(`/file/upload/${uploadToken}`);
};

View File

@@ -0,0 +1,61 @@
import type { MenuQueryResponse } from '@/api/system/menu';
import axios from 'axios';
/**
* 登录请求
*/
export interface LoginRequest {
username?: string;
password?: string;
}
/**
* 登录响应
*/
export interface LoginResponse {
token: string;
}
/**
* 用户权限响应
*/
export interface UserPermissionResponse {
user: {
id: number;
username: string;
nickname: string;
avatar: string;
systemPreference: Record<string, any>;
tippedKeys: Array<string>;
};
roles: Array<string>;
permissions: Array<string>;
}
/**
* 登录
*/
export function login(data: LoginRequest) {
return axios.post<LoginResponse>('/infra/auth/login', data);
}
/**
* 登出
*/
export function logout() {
return axios.get('/infra/auth/logout');
}
/**
* 获取用户信息
*/
export function getUserPermission() {
return axios.get<UserPermissionResponse>('/infra/permission/user');
}
/**
* 获取菜单列表
*/
export function getMenuList() {
return axios.get<Array<MenuQueryResponse>>('/infra/permission/menu');
}

View File

@@ -0,0 +1,61 @@
import type { DataGrid } from '@/types/global';
import type { OperatorLogQueryRequest, OperatorLogQueryResponse } from './operator-log';
import type { LoginHistoryQueryResponse, UserQueryResponse, UserSessionOfflineRequest, UserSessionQueryResponse, UserUpdateRequest } from './user';
import axios from 'axios';
/**
* 修改密码请求
*/
export interface UserUpdatePasswordRequest {
beforePassword?: string;
password?: string;
}
/**
* 修改当前用户密码
*/
export function updateCurrentUserPassword(request: UserUpdatePasswordRequest) {
return axios.put('/infra/mine/update-password', request);
}
/**
* 查询当前用户
*/
export function getCurrentUser() {
return axios.get<UserQueryResponse>('/infra/mine/get-user');
}
/**
* 更新当前用户
*/
export function updateCurrentUser(request: UserUpdateRequest) {
return axios.put('/infra/mine/update-user', request);
}
/**
* 查询当前用户登录日志
*/
export function getCurrentLoginHistory() {
return axios.get<LoginHistoryQueryResponse[]>('/infra/mine/login-history');
}
/**
* 获取当前用户会话列表
*/
export function getCurrentUserSessionList() {
return axios.get<UserSessionQueryResponse[]>('/infra/mine/user-session');
}
/**
* 下线当前用户会话
*/
export function offlineCurrentUserSession(request: UserSessionOfflineRequest) {
return axios.put('/infra/mine/offline-session', request);
}
/**
* 查询当前用户操作日志
*/
export function getCurrentUserOperatorLog(request: OperatorLogQueryRequest) {
return axios.post<DataGrid<OperatorLogQueryResponse>>('/infra/mine/query-operator-log', request);
}

View File

@@ -0,0 +1,75 @@
import type { DataGrid, Pagination } from '@/types/global';
import axios from 'axios';
import qs from 'query-string';
/**
* 操作日志查询参数
*/
export interface OperatorLogQueryRequest extends Pagination {
userId?: number;
username?: string;
module?: string;
type?: string;
riskLevel?: string;
result?: number;
startTimeRange?: string[];
}
/**
* 操作日志查询响应
*/
export interface OperatorLogQueryResponse {
id: number;
userId: number;
username: string;
traceId: string;
address: string;
location: string;
userAgent: string;
riskLevel: string;
module: string;
type: string;
logInfo: string;
originLogInfo: string;
extra: string;
result: number;
errorMessage: string;
returnValue: string;
duration: number;
startTime: number;
endTime: number;
createTime: number;
}
/**
* 分页操作日志
*/
export function getOperatorLogPage(request: OperatorLogQueryRequest) {
return axios.post<DataGrid<OperatorLogQueryResponse>>('/infra/operator-log/query', request);
}
/**
* 删除操作日志
*/
export function deleteOperatorLog(idList: Array<number>) {
return axios.delete('/infra/operator-log/delete', {
params: { idList },
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 查询操作日志数量
*/
export function getOperatorLogCount(request: OperatorLogQueryRequest) {
return axios.post<number>('/infra/operator-log/query-count', request);
}
/**
* 清空操作日志
*/
export function clearOperatorLog(request: OperatorLogQueryRequest) {
return axios.post<number>('/infra/operator-log/clear', request);
}

View File

@@ -0,0 +1,66 @@
import axios from 'axios';
import qs from 'query-string';
type PreferenceType = 'SYSTEM' | 'TERMINAL'
/**
* 用户偏好更新请求-单个
*/
export interface PreferenceUpdateRequest {
type: PreferenceType;
item: string;
value: any;
}
/**
* 用户偏好更新请求-部分
*/
export interface PreferenceUpdatePartialRequest {
type: PreferenceType;
config: Record<string, any> | object;
}
/**
* 更新用户偏好-单个
*/
export function updatePreference(request: PreferenceUpdateRequest) {
return axios.put('/infra/preference/update', request);
}
/**
* 更新用户偏好-部分
*/
export function updatePreferencePartial(request: PreferenceUpdatePartialRequest) {
return axios.put('/infra/preference/update-partial', request);
}
/**
* 查询用户偏好
*/
export function getPreference<T>(type: PreferenceType, items: Array<string> | undefined = undefined) {
return axios.get<T>('/infra/preference/get', {
params: {
type,
items
},
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}
/**
* 查询默认偏好
*/
export function getDefaultPreference<T>(type: PreferenceType, items: Array<string> | undefined = undefined) {
return axios.get<T>('/infra/preference/get-default', {
params: {
type,
items
},
paramsSerializer: params => {
return qs.stringify(params, { arrayFormat: 'comma' });
}
});
}

View File

@@ -0,0 +1,115 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
/**
* 角色创建请求
*/
export interface RoleCreateRequest {
name?: string;
code?: string;
status?: number;
}
/**
* 角色更新请求
*/
export interface RoleUpdateRequest extends RoleCreateRequest {
id?: number;
}
/**
* 角色 分配绑定请求
*/
export interface RoleGrantMenuRequest extends RoleCreateRequest {
roleId: number;
menuIdList: Array<number>;
}
/**
* 角色查询请求
*/
export interface RoleQueryRequest extends Pagination {
id?: number;
name?: string;
code?: string;
status?: number;
}
/**
* 角色查询响应
*/
export interface RoleQueryResponse extends TableData {
id: number;
name: string;
code: string;
status: number;
createTime: number;
updateTime: number;
creator: string;
updater: string;
}
/**
* 创建角色
*/
export function createRole(request: RoleCreateRequest) {
return axios.post('/infra/system-role/create', request);
}
/**
* 通过 id 更新角色
*/
export function updateRole(request: RoleUpdateRequest) {
return axios.put('/infra/system-role/update', request);
}
/**
* 通过 id 更新角色状态
*/
export function updateRoleStatus(request: RoleUpdateRequest) {
return axios.put('/infra/system-role/update-status', request);
}
/**
* 通过 id 查询角色
*/
export function getRole(id: number) {
return axios.get<RoleQueryResponse>('/infra/system-role/get', { params: { id } });
}
/**
* 查询所有角色
*/
export function getRoleList() {
return axios.get<RoleQueryResponse[]>('/infra/system-role/list');
}
/**
* 分页查询角色
*/
export function getRolePage(request: RoleQueryRequest) {
return axios.post<DataGrid<RoleQueryResponse>>('/infra/system-role/query', request);
}
/**
* 通过 id 删除角色
*/
export function deleteRole(id: number) {
return axios.delete('/infra/system-role/delete', { params: { id } });
}
/**
* 分配角色菜单
*/
export function grantRoleMenu(request: RoleGrantMenuRequest) {
return axios.put('/infra/system-role/grant-menu', request);
}
/**
* 获取角色菜单id
*/
export function getRoleMenuId(roleId: number) {
return axios.get<Array<number>>('/infra/system-role/get-menu-id', { params: { roleId } });
}

View File

@@ -0,0 +1,8 @@
import axios from 'axios';
/**
* 修改为已提示
*/
export function setTipsTipped(key: string) {
return axios.put('/infra/tips/tipped', null, { params: { key } });
}

View File

@@ -0,0 +1,184 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import type { RoleQueryResponse } from '@/api/user/role';
import axios from 'axios';
/**
* 用户创建请求
*/
export interface UserCreateRequest {
username?: string;
password?: string;
nickname?: string;
avatar?: string;
mobile?: string;
email?: string;
}
/**
* 用户更新请求
*/
export interface UserUpdateRequest extends UserCreateRequest {
id?: number;
status?: number;
roleIdList?: Array<number>;
password?: string;
}
/**
* 用户查询请求
*/
export interface UserQueryRequest extends Pagination {
id?: number;
username?: string;
password?: string;
nickname?: string;
avatar?: string;
mobile?: string;
email?: string;
status?: number;
lastLoginTime?: string;
}
/**
* 用户查询响应
*/
export interface UserQueryResponse extends TableData {
id: number;
username: string;
nickname: string;
avatar: string;
mobile: string;
email: string;
status: number;
lastLoginTime?: number;
createTime: number;
updateTime: number;
creator: string;
updater: string;
roles: Array<RoleQueryResponse>;
}
/**
* 用户会话查询响应
*/
export interface UserSessionQueryResponse {
visible: boolean;
current: boolean;
address: string;
location: string;
userAgent: string;
loginTime: number;
}
/**
* 用户会话下线请求
*/
export interface UserSessionOfflineRequest {
userId?: number;
timestamp: number;
}
/**
* 登录日志查询响应
*/
export interface LoginHistoryQueryResponse {
id: number;
address: string;
location: string;
userAgent: string;
result: number;
errorMessage: string;
createTime: number;
}
/**
* 创建用户
*/
export function createUser(request: UserCreateRequest) {
return axios.post('/infra/system-user/create', request);
}
/**
* 通过 id 更新用户
*/
export function updateUser(request: UserUpdateRequest) {
return axios.put('/infra/system-user/update', request);
}
/**
* 修改用户状态
*/
export function updateUserStatus(request: UserUpdateRequest) {
return axios.put('/infra/system-user/update-status', request);
}
/**
* 修改用户角色
*/
export function grantUserRole(request: UserUpdateRequest) {
return axios.put('/infra/system-user/grant-role', request);
}
/**
* 重置用户密码
*/
export function resetUserPassword(request: UserUpdateRequest) {
return axios.put('/infra/system-user/reset-password', request);
}
/**
* 通过 id 查询用户
*/
export function getUser(id: number) {
return axios.get<UserQueryResponse>('/infra/system-user/get', { params: { id } });
}
/**
* 查询所有用户
*/
export function getUserList() {
return axios.get<UserQueryResponse[]>('/infra/system-user/list');
}
/**
* 查询用户的 roleId
*/
export function getUserRoleIdList(userId: number) {
return axios.get<Array<number>>('/infra/system-user/get-roles', { params: { userId } });
}
/**
* 分页查询用户
*/
export function getUserPage(request: UserQueryRequest) {
return axios.post<DataGrid<UserQueryResponse>>('/infra/system-user/query', request);
}
/**
* 通过 id 删除用户
*/
export function deleteUser(id: number) {
return axios.delete('/infra/system-user/delete', { params: { id } });
}
/**
* 获取用户会话列表
*/
export function getUserSessionList(id: number) {
return axios.get<Array<UserSessionQueryResponse>>('/infra/system-user/session/list', { params: { id } });
}
/**
* 下线用户会话
*/
export function offlineUserSession(request: UserSessionOfflineRequest) {
return axios.put('/infra/system-user/session/offline', request);
}
/**
* 查询登录日志
*/
export function getLoginHistory(username: string) {
return axios.get<LoginHistoryQueryResponse[]>('/infra/system-user/login-history', { params: { username } });
}