diff --git a/orion-ops-ui/src/api/asset/host.ts b/orion-ops-ui/src/api/asset/host.ts new file mode 100644 index 00000000..3568da21 --- /dev/null +++ b/orion-ops-ui/src/api/asset/host.ts @@ -0,0 +1,109 @@ +import axios from 'axios'; +import qs from 'query-string'; +import { DataGrid, Pagination } from '@/types/global'; + +/** + * 主机创建请求 + */ +export interface HostCreateRequest { + name?: string; + code?: string; + address?: string; +} + +/** + * 主机更新请求 + */ +export interface HostUpdateRequest extends HostCreateRequest { + id: number; +} + +/** + * 主机查询请求 + */ +export interface HostQueryRequest extends Pagination { + id?: number; + name?: string; + code?: string; + address?: string; +} + +/** + * 主机查询响应 + */ +export interface HostQueryResponse { + id?: number; + name?: string; + code?: string; + address?: string; + createTime: number; + updateTime: number; + creator: string; + updater: string; +} + +/** + * 创建主机 + */ +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('/asset/host/get', { params: { id } }); +} + +/** + * 通过 id 批量查询主机 + */ +export function getHostList(idList: Array) { + return axios.get('/asset/host/list', { + params: { idList }, + paramsSerializer: params => { + return qs.stringify(params, { arrayFormat: 'comma' }); + } + }); +} + +/** + * 查询主机 + */ +export function getHostListAll(request: HostQueryRequest) { + return axios.post>('/asset/host/list-all', request); +} + +/** + * 分页查询主机 + */ +export function getHostPage(request: HostQueryRequest) { + return axios.post>('/asset/host/query', request); +} + +/** + * 通过 id 删除主机 + */ +export function deleteHost(id: number) { + return axios.delete('/asset/host/delete', { params: { id } }); +} + +/** + * 通过 id 批量删除主机 + */ +export function batchDeleteHost(idList: Array) { + return axios.delete('/asset/host/delete-batch', { + params: { idList }, + paramsSerializer: params => { + return qs.stringify(params, { arrayFormat: 'comma' }); + } + }); +} diff --git a/orion-ops-ui/src/hooks/copy.ts b/orion-ops-ui/src/hooks/copy.ts new file mode 100644 index 00000000..468af897 --- /dev/null +++ b/orion-ops-ui/src/hooks/copy.ts @@ -0,0 +1,24 @@ +import { useClipboard } from '@vueuse/core'; +import { Message } from '@arco-design/web-vue'; + +export default function useCopy() { + const { isSupported, copy: c, text, copied } = useClipboard(); + const copy = (value: string, tips = `${value} 已复制`) => { + return c(value) + .then(() => { + if (tips) { + Message.success(tips); + } + }).catch(() => { + Message.error('复制失败'); + }); + }; + return { + isSupported, + copy, + text, + copied + }; +} + + diff --git a/orion-ops-ui/src/router/routes/modules/asset.ts b/orion-ops-ui/src/router/routes/modules/asset.ts new file mode 100644 index 00000000..3e69df54 --- /dev/null +++ b/orion-ops-ui/src/router/routes/modules/asset.ts @@ -0,0 +1,17 @@ +import { DEFAULT_LAYOUT } from '../base'; +import { AppRouteRecordRaw } from '../types'; + +const ASSET: AppRouteRecordRaw = { + name: 'asset', + path: '/asset', + component: DEFAULT_LAYOUT, + children: [ + { + name: 'assetHost', + path: '/asset/host', + component: () => import('@/views/asset/host/index.vue'), + }, + ], +}; + +export default ASSET; diff --git a/orion-ops-ui/src/router/routes/modules/system.menu.ts b/orion-ops-ui/src/router/routes/modules/system.ts similarity index 79% rename from orion-ops-ui/src/router/routes/modules/system.menu.ts rename to orion-ops-ui/src/router/routes/modules/system.ts index 513950b5..405a00c9 100644 --- a/orion-ops-ui/src/router/routes/modules/system.menu.ts +++ b/orion-ops-ui/src/router/routes/modules/system.ts @@ -1,8 +1,8 @@ import { DEFAULT_LAYOUT } from '../base'; import { AppRouteRecordRaw } from '../types'; -const MENU: AppRouteRecordRaw = { - name: 'menu', +const SYSTEM: AppRouteRecordRaw = { + name: 'system', path: '/system', component: DEFAULT_LAYOUT, children: [ @@ -14,4 +14,4 @@ const MENU: AppRouteRecordRaw = { ], }; -export default MENU; +export default SYSTEM; diff --git a/orion-ops-ui/src/views/asset/host/components/host-form-modal.vue b/orion-ops-ui/src/views/asset/host/components/host-form-modal.vue new file mode 100644 index 00000000..040bf4e2 --- /dev/null +++ b/orion-ops-ui/src/views/asset/host/components/host-form-modal.vue @@ -0,0 +1,146 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/asset/host/components/host-table.vue b/orion-ops-ui/src/views/asset/host/components/host-table.vue new file mode 100644 index 00000000..634d4e8d --- /dev/null +++ b/orion-ops-ui/src/views/asset/host/components/host-table.vue @@ -0,0 +1,242 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/asset/host/index.vue b/orion-ops-ui/src/views/asset/host/index.vue new file mode 100644 index 00000000..1a1e173f --- /dev/null +++ b/orion-ops-ui/src/views/asset/host/index.vue @@ -0,0 +1,32 @@ + + + + + + + diff --git a/orion-ops-ui/src/views/asset/host/types/enum.types.ts b/orion-ops-ui/src/views/asset/host/types/enum.types.ts new file mode 100644 index 00000000..e69de29b diff --git a/orion-ops-ui/src/views/asset/host/types/form.rules.ts b/orion-ops-ui/src/views/asset/host/types/form.rules.ts new file mode 100644 index 00000000..22a549e6 --- /dev/null +++ b/orion-ops-ui/src/views/asset/host/types/form.rules.ts @@ -0,0 +1,31 @@ +import { FieldRule } from '@arco-design/web-vue'; + +export const name = [{ + required: true, + message: '请输入主机名称' +}, { + maxLength: 64, + message: '主机名称长度不能大于64位' +}] as FieldRule[]; + +export const code = [{ + required: true, + message: '请输入主机编码' +}, { + maxLength: 64, + message: '主机编码长度不能大于64位' +}] as FieldRule[]; + +export const address = [{ + required: true, + message: '请输入主机地址' +}, { + maxLength: 128, + message: '主机地址长度不能大于128位' +}] as FieldRule[]; + +export default { + name, + code, + address, +} as Record; diff --git a/orion-ops-ui/src/views/asset/host/types/table.columns.ts b/orion-ops-ui/src/views/asset/host/types/table.columns.ts new file mode 100644 index 00000000..8fe95e98 --- /dev/null +++ b/orion-ops-ui/src/views/asset/host/types/table.columns.ts @@ -0,0 +1,35 @@ +import { TableColumnData } from '@arco-design/web-vue/es/table/interface'; + +const columns = [ + { + title: 'id', + dataIndex: 'id', + slotName: 'id', + width: 70, + align: 'left', + fixed: 'left', + }, { + title: '主机名称', + dataIndex: 'name', + slotName: 'name', + align: 'center', + }, { + title: '主机编码', + dataIndex: 'code', + slotName: 'code', + align: 'center', + }, { + title: '主机地址', + dataIndex: 'address', + slotName: 'address', + align: 'center', + }, { + title: '操作', + slotName: 'handle', + width: 130, + align: 'center', + fixed: 'right', + }, +] as TableColumnData[]; + +export default columns;