@@ -35,6 +71,8 @@
import MsTableMoreAction from '@/components/pure/ms-table-more-action/index.vue';
import type { ActionsItem } from '@/components/pure/ms-table-more-action/types';
import { FileIconMap, getFileEnum } from '@/components/pure/ms-upload/iconMap';
+ import MsUpload from '@/components/pure/ms-upload/index.vue';
+ import { MsFileItem } from '@/components/pure/ms-upload/types';
import { UploadStatus } from '@/enums/uploadEnum';
@@ -45,6 +83,7 @@
url?: string;
footerText?: string;
moreActions?: ActionsItem[];
+ useUpload?: boolean; // 是否使用上传
}>(),
{
mode: 'default',
@@ -53,6 +92,7 @@
const emit = defineEmits<{
(e: 'click'): void;
(e: 'actionSelect', item: ActionsItem): void;
+ (e: 'change', fileItem: MsFileItem): void;
}>();
const fileType = computed(() => {
@@ -69,6 +109,10 @@
function handleMoreActionSelect(item: ActionsItem) {
emit('actionSelect', item);
}
+
+ function handleChange(_fileList: MsFileItem[], fileItem: MsFileItem) {
+ emit('change', fileItem);
+ }
diff --git a/frontend/src/components/pure/ms-sys-upgrade-tip/locale/en-US.ts b/frontend/src/components/pure/ms-sys-upgrade-tip/locale/en-US.ts
new file mode 100644
index 0000000000..41cba60dce
--- /dev/null
+++ b/frontend/src/components/pure/ms-sys-upgrade-tip/locale/en-US.ts
@@ -0,0 +1,3 @@
+export default {
+ 'ms.sys.upgrade.tip.content': 'The system has been updated, please refresh the page',
+};
diff --git a/frontend/src/components/pure/ms-sys-upgrade-tip/locale/zh-CN.ts b/frontend/src/components/pure/ms-sys-upgrade-tip/locale/zh-CN.ts
new file mode 100644
index 0000000000..f968f5b4fb
--- /dev/null
+++ b/frontend/src/components/pure/ms-sys-upgrade-tip/locale/zh-CN.ts
@@ -0,0 +1,3 @@
+export default {
+ 'ms.sys.upgrade.tip.content': '系统已更新,请刷新页面',
+};
diff --git a/frontend/src/components/pure/ms-table/select-all.vue b/frontend/src/components/pure/ms-table/select-all.vue
index 6a4de0420a..25bb2d26e0 100644
--- a/frontend/src/components/pure/ms-table/select-all.vue
+++ b/frontend/src/components/pure/ms-table/select-all.vue
@@ -56,7 +56,7 @@
get: () => {
// 如果是选中所有页则是全选状态(选中所有页分两种情况:一是直接通过下拉选项选中所有页;二是当前已选的数量等于表格总数)
return (
- selectAllStatus.value === SelectAllEnum.ALL ||
+ (props.selectedKeys.size > 0 && selectAllStatus.value === SelectAllEnum.ALL) ||
(props.selectedKeys.size > 0 && props.selectedKeys.size === props.total)
);
},
diff --git a/frontend/src/components/pure/ms-table/useTable.ts b/frontend/src/components/pure/ms-table/useTable.ts
index bfe1c89b5f..5ee34edd9e 100644
--- a/frontend/src/components/pure/ms-table/useTable.ts
+++ b/frontend/src/components/pure/ms-table/useTable.ts
@@ -403,7 +403,7 @@ export default function useTableProps
(
// 重置筛选
clearSelector: () => {
propsRes.value.selectorStatus = SelectAllEnum.NONE; // 重置选择器状态
- resetSelector();
+ resetSelector(true);
},
// 表格SelectAll change
diff --git a/frontend/src/components/pure/navbar/index.vue b/frontend/src/components/pure/navbar/index.vue
index ac918fdd0d..fc4c4f7728 100644
--- a/frontend/src/components/pure/navbar/index.vue
+++ b/frontend/src/components/pure/navbar/index.vue
@@ -19,6 +19,7 @@
v-model:model-value="appStore.currentProjectId"
class="w-[200px] focus-within:!bg-[var(--color-text-n8)] hover:!bg-[var(--color-text-n8)]"
:bordered="false"
+ :fallback-option="() => undefined"
allow-search
@change="selectProject"
>
diff --git a/frontend/src/hooks/useUser.ts b/frontend/src/hooks/useUser.ts
index 27e6b53441..fb8cb89429 100644
--- a/frontend/src/hooks/useUser.ts
+++ b/frontend/src/hooks/useUser.ts
@@ -1,28 +1,32 @@
-import { useRouter } from 'vue-router';
import { Message } from '@arco-design/web-vue';
import { useI18n } from '@/hooks/useI18n';
+import router from '@/router';
import { useAppStore, useUserStore } from '@/store';
export default function useUser() {
- const router = useRouter();
const { t } = useI18n();
const logout = async (logoutTo?: string) => {
- const appStore = useAppStore();
- const userStore = useUserStore();
- await userStore.logout();
- const currentRoute = router.currentRoute.value;
- // 清空顶部菜单
- appStore.setTopMenus([]);
- Message.success(t('message.logoutSuccess'));
- router.push({
- name: logoutTo && typeof logoutTo === 'string' ? logoutTo : 'login',
- query: {
- ...router.currentRoute.value.query,
- redirect: currentRoute.name as string,
- },
- });
+ try {
+ const userStore = useUserStore();
+ await userStore.logout();
+ const appStore = useAppStore();
+ const currentRoute = router.currentRoute.value;
+ // 清空顶部菜单
+ appStore.setTopMenus([]);
+ Message.success(t('message.logoutSuccess'));
+ router.push({
+ name: logoutTo && typeof logoutTo === 'string' ? logoutTo : 'login',
+ query: {
+ ...router.currentRoute.value.query,
+ redirect: currentRoute.name as string,
+ },
+ });
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.log(error);
+ }
};
const isLoginPage = () => {
diff --git a/frontend/src/locale/en-US/common.ts b/frontend/src/locale/en-US/common.ts
index 5e48130f8e..340724641a 100644
--- a/frontend/src/locale/en-US/common.ts
+++ b/frontend/src/locale/en-US/common.ts
@@ -153,4 +153,5 @@ export default {
'common.image': 'Image',
'common.text': 'Text',
'common.resourceDeleted': 'Resource has been deleted',
+ 'common.refresh': 'Refresh',
};
diff --git a/frontend/src/locale/zh-CN/common.ts b/frontend/src/locale/zh-CN/common.ts
index 89f224aad1..ed9a82156f 100644
--- a/frontend/src/locale/zh-CN/common.ts
+++ b/frontend/src/locale/zh-CN/common.ts
@@ -153,4 +153,5 @@ export default {
'common.image': '图片',
'common.text': '文本',
'common.resourceDeleted': '资源已被删除',
+ 'common.refresh': '刷新',
};
diff --git a/frontend/src/models/apiTest/scenario.ts b/frontend/src/models/apiTest/scenario.ts
index b4013f5829..886973cfc2 100644
--- a/frontend/src/models/apiTest/scenario.ts
+++ b/frontend/src/models/apiTest/scenario.ts
@@ -486,4 +486,5 @@ export interface ScenarioStepResourceInfo {
name: string;
projectId: string;
projectName: string;
+ delete: boolean;
}
diff --git a/frontend/src/store/modules/app/index.ts b/frontend/src/store/modules/app/index.ts
index f5c33fdf24..75fb576310 100644
--- a/frontend/src/store/modules/app/index.ts
+++ b/frontend/src/store/modules/app/index.ts
@@ -246,34 +246,11 @@ const useAppStore = defineStore('app', {
console.log(error);
}
},
- async validateUserProjectPermission() {
- try {
- const router = useRouter();
- const HasProjectPermission = await getUserHasProjectPermission(this.currentProjectId);
- if (!HasProjectPermission) {
- // 没有项目权限(用户所在的当前项目被禁用&用户被移除出去该项目)
- router.push({
- name: NO_PROJECT_ROUTE_NAME,
- });
- return false;
- }
-
- const res = await getProjectInfo(this.currentProjectId);
- if (res.deleted) {
- // 如果项目被删除或者被禁用,跳转到无项目页面
- router.push({
- name: NO_PROJECT_ROUTE_NAME,
- });
- return false;
- }
- return true;
- } catch (error) {
- console.log(error);
- return false;
- }
- },
async getProjectInfos() {
try {
+ if (!this.currentProjectId) {
+ return;
+ }
const res = await getProjectInfo(this.currentProjectId);
if (!res || res.deleted) {
const router = useRouter();
@@ -285,6 +262,7 @@ const useAppStore = defineStore('app', {
this.setCurrentMenuConfig(res?.moduleIds || []);
}
} catch (error) {
+ // eslint-disable-next-line no-console
console.log(error);
}
},
diff --git a/frontend/src/views/api-test/components/condition/content.vue b/frontend/src/views/api-test/components/condition/content.vue
index d2faf19b48..33305215e3 100644
--- a/frontend/src/views/api-test/components/condition/content.vue
+++ b/frontend/src/views/api-test/components/condition/content.vue
@@ -373,7 +373,7 @@
:selectable="false"
:scroll="{ x: '700px' }"
:response="props.response"
- :height-used="(props.heightUsed || 0) + 68"
+ :height-used="props.heightUsed"
@change="handleExtractParamTableChange"
@more-action-select="(e,r)=> handleExtractParamMoreActionSelect(e,r as ExpressionConfig)"
>
diff --git a/frontend/src/views/api-test/components/requestComposition/body.vue b/frontend/src/views/api-test/components/requestComposition/body.vue
index e866457ee9..28d796a5a4 100644
--- a/frontend/src/views/api-test/components/requestComposition/body.vue
+++ b/frontend/src/views/api-test/components/requestComposition/body.vue
@@ -258,7 +258,7 @@
watch(
() => props.layout,
(val) => {
- const otherHeight = props.isDrawer ? 328 : 430;
+ const otherHeight = props.isDrawer ? 328 : 372;
heightUsed.value = val === 'horizontal' ? otherHeight : otherHeight + props.secondBoxHeight;
},
{
@@ -270,7 +270,7 @@
() => props.secondBoxHeight,
(val) => {
if (props.layout === 'vertical') {
- heightUsed.value = (props.isDrawer ? 328 : 430) + val;
+ heightUsed.value = (props.isDrawer ? 328 : 372) + val;
}
},
{
diff --git a/frontend/src/views/api-test/components/requestComposition/header.vue b/frontend/src/views/api-test/components/requestComposition/header.vue
index b71a97afaf..8ea8d43ee9 100644
--- a/frontend/src/views/api-test/components/requestComposition/header.vue
+++ b/frontend/src/views/api-test/components/requestComposition/header.vue
@@ -85,9 +85,9 @@
const heightUsed = computed(() => {
if (props.layout === 'horizontal') {
- return props.isDrawer ? 328 : 428;
+ return props.isDrawer ? 328 : 372;
}
- return (props.isDrawer ? 328 : 428) + props.secondBoxHeight;
+ return (props.isDrawer ? 328 : 372) + props.secondBoxHeight;
});
const scroll = computed(() => (props.layout === 'horizontal' ? { x: '700px' } : { x: '100%' }));
diff --git a/frontend/src/views/api-test/components/requestComposition/postcondition.vue b/frontend/src/views/api-test/components/requestComposition/postcondition.vue
index ff5e2b36cb..6816697b97 100644
--- a/frontend/src/views/api-test/components/requestComposition/postcondition.vue
+++ b/frontend/src/views/api-test/components/requestComposition/postcondition.vue
@@ -57,9 +57,9 @@
const innerConfig = useVModel(props, 'config', emit);
const heightUsed = computed(() => {
if (props.layout === 'horizontal') {
- return 428;
+ return 328;
}
- return 428 + (props.secondBoxHeight || 0);
+ return 328 + (props.secondBoxHeight || 0);
});
const conditionTypes = computed(() => {
diff --git a/frontend/src/views/api-test/components/requestComposition/query.vue b/frontend/src/views/api-test/components/requestComposition/query.vue
index 109accb621..212723003c 100644
--- a/frontend/src/views/api-test/components/requestComposition/query.vue
+++ b/frontend/src/views/api-test/components/requestComposition/query.vue
@@ -124,7 +124,7 @@
watch(
() => props.layout,
(val) => {
- const otherHeight = props.isDrawer ? 328 : 430;
+ const otherHeight = props.isDrawer ? 328 : 372;
heightUsed.value = val === 'horizontal' ? otherHeight : otherHeight + props.secondBoxHeight;
},
{
@@ -136,7 +136,7 @@
() => props.secondBoxHeight,
(val) => {
if (props.layout === 'vertical') {
- heightUsed.value = (props.isDrawer ? 328 : 430) + val;
+ heightUsed.value = (props.isDrawer ? 328 : 372) + val;
}
},
{
diff --git a/frontend/src/views/api-test/components/requestComposition/response/result/console.vue b/frontend/src/views/api-test/components/requestComposition/response/result/console.vue
index 4df86bbf04..4a9006ce34 100644
--- a/frontend/src/views/api-test/components/requestComposition/response/result/console.vue
+++ b/frontend/src/views/api-test/components/requestComposition/response/result/console.vue
@@ -14,8 +14,6 @@