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"
>