diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs index d48dcf86..a354db97 100644 --- a/frontend/.eslintrc.cjs +++ b/frontend/.eslintrc.cjs @@ -11,7 +11,7 @@ module.exports = { parser: '@typescript-eslint/parser', sourceType: 'module', }, - extends: ['plugin:vue/vue3-essential', 'plugin:vue/essential', 'eslint:recommended'], + extends: ['plugin:vue/essential', 'eslint:recommended'], plugins: ['vue', '@typescript-eslint'], overrides: [ { @@ -35,9 +35,8 @@ module.exports = { '@typescript-eslint/ban-types': 'off', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-redeclare': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', - '@typescript-eslint/no-unused-vars': [2], + '@typescript-eslint/no-unused-vars': 'off', 'vue/custom-event-name-casing': 'off', 'vue/attributes-order': 'off', 'vue/one-component-per-file': 'off', @@ -53,6 +52,7 @@ module.exports = { 'vue/no-arrow-functions-in-watch': 'off', 'vue/no-template-key': 'off', 'vue/no-v-html': 'off', + 'vue/no-unused-vars': 'off', 'vue/comment-directive': 'off', 'vue/no-parsing-error': 'off', 'vue/no-deprecated-v-on-native-modifier': 'off', @@ -67,7 +67,7 @@ module.exports = { 'generator-star-spacing': 'off', 'no-unreachable': 'off', 'no-multiple-template-root': 'off', - 'no-unused-vars': 'error', + 'no-unused-vars': 'off', 'no-v-model-argument': 'off', 'no-case-declarations': 'off', // 'no-console': 'error', diff --git a/frontend/src/assets/icon/es/es-color.svg b/frontend/src/assets/icon/es/es-color.svg new file mode 100644 index 00000000..52b093d7 --- /dev/null +++ b/frontend/src/assets/icon/es/es-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icon/es/es.svg b/frontend/src/assets/icon/es/es.svg new file mode 100644 index 00000000..3a9d01ef --- /dev/null +++ b/frontend/src/assets/icon/es/es.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/common/Api.ts b/frontend/src/common/Api.ts index 3a4c6b78..2085088f 100644 --- a/frontend/src/common/Api.ts +++ b/frontend/src/common/Api.ts @@ -1,5 +1,5 @@ import request from './request'; -import { useApiFetch } from '@/hooks/useRequest'; +import { RequestOptions, useApiFetch } from '@/hooks/useRequest'; /** * 可用于各模块定义各自api请求 @@ -49,7 +49,7 @@ class Api { * @param reqOptions 其他可选值 * @returns */ - useApi(params: any = null, reqOptions: RequestInit = {}) { + useApi(params: any = null, reqOptions?: RequestOptions) { return useApiFetch(this, params, reqOptions); } @@ -59,8 +59,8 @@ class Api { */ async request(param: any = null, options: any = {}): Promise { const { execute, data } = this.useApi(param, options); - await execute(); - return data.value; + const res = await execute(); + return data.value || res; } /** diff --git a/frontend/src/common/commonEnum.ts b/frontend/src/common/commonEnum.ts index 0f0ee127..5ed55897 100644 --- a/frontend/src/common/commonEnum.ts +++ b/frontend/src/common/commonEnum.ts @@ -15,6 +15,8 @@ export const ResourceTypeEnum = { Db: EnumValue.of(2, '数据库实例').setExtra({ icon: 'Coin', iconColor: 'var(--el-color-warning)' }).tagTypeWarning(), Redis: EnumValue.of(3, 'redis').setExtra({ icon: 'icon redis/redis', iconColor: 'var(--el-color-danger)' }).tagTypeInfo(), Mongo: EnumValue.of(4, 'mongo').setExtra({ icon: 'icon mongo/mongo', iconColor: 'var(--el-color-success)' }).tagTypeDanger(), + AuthCert: EnumValue.of(5, '授权凭证').setExtra({ icon: 'Ticket', iconColor: 'var(--el-color-success)' }), + Es: EnumValue.of(6, 'ES实例').setExtra({ icon: 'Coin', iconColor: 'var(--el-color-warning)' }).tagTypeWarning(), }; // 标签关联的资源类型 @@ -24,9 +26,10 @@ export const TagResourceTypeEnum = { Machine: ResourceTypeEnum.Machine, DbInstance: ResourceTypeEnum.Db, + EsInstance: ResourceTypeEnum.Es, Redis: ResourceTypeEnum.Redis, Mongo: ResourceTypeEnum.Mongo, - AuthCert: EnumValue.of(5, '授权凭证').setExtra({ icon: 'Ticket', iconColor: 'var(--el-color-success)' }), + AuthCert: ResourceTypeEnum.AuthCert, Db: EnumValue.of(22, '数据库').setExtra({ icon: 'Coin' }), }; @@ -37,4 +40,5 @@ export const TagResourceTypePath = { DbInstanceAuthCert: `${TagResourceTypeEnum.DbInstance.value}/${TagResourceTypeEnum.AuthCert.value}`, Db: `${TagResourceTypeEnum.DbInstance.value}/${TagResourceTypeEnum.AuthCert.value}/${TagResourceTypeEnum.Db.value}`, + Es: `${TagResourceTypeEnum.EsInstance.value}/${TagResourceTypeEnum.AuthCert.value}`, }; diff --git a/frontend/src/common/utils/format.ts b/frontend/src/common/utils/format.ts index f18945ba..4f921f29 100644 --- a/frontend/src/common/utils/format.ts +++ b/frontend/src/common/utils/format.ts @@ -30,6 +30,18 @@ export function formatByteSize(size: number, fixed = 2) { return parseFloat((size / Math.pow(base, exponent)).toFixed(fixed)) + units[exponent]; } +export function formatDocSize(size: number, fixed = 2) { + if (size === 0) { + return '0'; + } + + const units = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']; + const base = 1000; + const exponent = Math.floor(Math.log(size) / Math.log(base)); + + return parseFloat((size / Math.pow(base, exponent)).toFixed(fixed)) + units[exponent]; +} + /** * 容量转为对应的字节大小,如 1KB转为 1024 * @param sizeString 1kb 1gb等 @@ -86,8 +98,8 @@ export function formatTime(time: number, unit: string = 's') { let result = ''; const timeUnits = Object.entries(units).map(([unit, duration]) => { - const value = Math.floor(seconds / duration); - seconds %= duration; + const value = Math.floor(seconds / (duration as any)); + seconds %= duration as any; return { value, unit }; }); diff --git a/frontend/src/components/contextmenu/index.vue b/frontend/src/components/contextmenu/index.vue index 531036fe..dc0253f6 100644 --- a/frontend/src/components/contextmenu/index.vue +++ b/frontend/src/components/contextmenu/index.vue @@ -8,6 +8,7 @@ :style="`top: ${state.dropdown.y + 5}px;left: ${state.dropdown.x}px;`" :key="Math.random()" v-show="state.isShow && !allHide" + @contextmenu="headerContextmenuClick" >
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +