diff --git a/frontend/src/enums/tableEnum.ts b/frontend/src/enums/tableEnum.ts index cc73615a4e..f7694b6835 100644 --- a/frontend/src/enums/tableEnum.ts +++ b/frontend/src/enums/tableEnum.ts @@ -62,8 +62,12 @@ export enum TableKeyEnum { PROJECT_MANAGEMENT_ENV_ALL_PARAM_HEADER = 'projectManagementEnvAllParamHeader', PROJECT_MANAGEMENT_ENV_ALL_PARAM_VARIABLE = 'projectManagementEnvAllParamVariable', TEST_PLAN_ALL_TABLE = 'testPlanAllTable', - TASK_API_CASE = 'taskCenterApiCase', - TASK_SCHEDULE_TASK = 'taskCenterSchedule', + TASK_API_CASE_SYSTEM = 'taskCenterApiCaseSystem', + TASK_API_CASE_ORGANIZATION = 'taskCenterApiCaseOrganization', + TASK_API_CASE_PROJECT = 'taskCenterApiCaseProject', + TASK_SCHEDULE_TASK_SYSTEM = 'taskCenterScheduleSystem', + TASK_SCHEDULE_TASK_ORGANIZATION = 'taskCenterScheduleOrganization', + TASK_SCHEDULE_TASK_PROJECT = 'taskCenterScheduleProject', } // 具有特殊功能的列 diff --git a/frontend/src/enums/taskCenter.ts b/frontend/src/enums/taskCenter.ts index 0162944119..8d7e5ae435 100644 --- a/frontend/src/enums/taskCenter.ts +++ b/frontend/src/enums/taskCenter.ts @@ -1,11 +1,11 @@ // 模板展示字段icon export enum TaskCenterEnum { API_CASE = 'API_CASE', // 接口用例 - API_SCENARIO = 'API_SCENARIO', // 接口场景 + API_SCENARIO = 'API_SCENARIO', // 接口场景 API场景 UI_TEST = 'UI_TEST', // ui测试 LOAD_TEST = 'LOAD_TEST', // 性能测试 TEST_PLAN = 'TEST_PLAN', // 测试计划 - // TEST_RESOURCE = 'TEST_RESOURCE', // 测试资源 + TEST_RESOURCE = 'TEST_RESOURCE', // 测试资源 API_IMPORT = 'API_IMPORT', // API导入 } diff --git a/frontend/src/models/caseManagement/featureCase.ts b/frontend/src/models/caseManagement/featureCase.ts index 2759216591..31d1bf600f 100644 --- a/frontend/src/models/caseManagement/featureCase.ts +++ b/frontend/src/models/caseManagement/featureCase.ts @@ -224,8 +224,8 @@ export interface CaseModuleQueryParams extends TableQueryParams { export interface TabItemType { key: string; title: string; - enable: boolean; - total: number; + canHide: boolean; + isShow: boolean; } // 需求 @@ -355,3 +355,8 @@ export interface DeleteDependencyParams { caseId: string; type: string; } + +export interface ContentTabsMap { + tabList: TabItemType[]; + backupTabList: TabItemType[]; +} diff --git a/frontend/src/store/modules/case/featureCase.ts b/frontend/src/store/modules/case/featureCase.ts index e1d0bcaa78..a8cd2b0a58 100644 --- a/frontend/src/store/modules/case/featureCase.ts +++ b/frontend/src/store/modules/case/featureCase.ts @@ -1,4 +1,5 @@ import { defineStore } from 'pinia'; +import localforage from 'localforage'; import { getCaseDefaultFields, @@ -6,8 +7,9 @@ import { getCaseModulesCounts, getRecycleModulesCounts, } from '@/api/modules/case-management/featureCase'; +import { isArraysEqualWithOrder } from '@/utils/equal'; -import type { CaseModuleQueryParams, CustomAttributes, TabItemType } from '@/models/caseManagement/featureCase'; +import type { ContentTabsMap, CustomAttributes, TabItemType } from '@/models/caseManagement/featureCase'; import { ModuleTreeNode, TableQueryParams } from '@/models/common'; import useAppStore from '../app'; @@ -20,7 +22,7 @@ const useFeatureCaseStore = defineStore('featureCase', { modulesCount: Record; // 用例树模块数量 recycleModulesCount: Record; // 回收站模块数量 operatingState: boolean; // 操作状态 - tabSettingList: TabItemType[]; // 详情tab + countMap: Record; activeTab: string; // 激活tab defaultFields: CustomAttributes[]; defaultCount: Record; @@ -30,10 +32,19 @@ const useFeatureCaseStore = defineStore('featureCase', { modulesCount: {}, recycleModulesCount: {}, operatingState: false, - tabSettingList: [], activeTab: 'detail', defaultFields: [], defaultCount: {}, + countMap: { + case: '0', + dependency: '0', + caseReview: '0', + testPlan: '0', + bug: '0', + requirement: '0', + comments: '0', + changeHistory: '0', + }, }), actions: { // 设置选择moduleId @@ -51,7 +62,6 @@ const useFeatureCaseStore = defineStore('featureCase', { // 获取模块数量 async getCaseModulesCount(params: TableQueryParams) { try { - // this.modulesCount = {}; this.modulesCount = await getCaseModulesCounts(params); } catch (error) { console.log(error); @@ -65,40 +75,17 @@ const useFeatureCaseStore = defineStore('featureCase', { console.log(error); } }, - // 设置菜单 - setTab(list: TabItemType[]) { - this.tabSettingList = list; - }, - // 获取显示的tab - getTab() { - return this.tabSettingList.filter((item) => item.enable); - }, // 设置激活tab setActiveTab(active: string | number) { this.activeTab = active as string; }, // 设置菜单模块列表数量 setListCount(type: string, count = 0) { - this.tabSettingList = this.tabSettingList.map((item: any) => { - if (type === item.key) { - return { - ...item, - total: count, - }; - } - return { - ...item, - }; - }); + this.countMap[type] = count; }, // 初始化count initCountMap(countMap: Record) { - this.tabSettingList = this.tabSettingList.map((item) => { - return { - ...item, - total: countMap[item.key] || 0, - }; - }); + this.countMap = { ...countMap }; }, // 获取默认模版 async getDefaultTemplate() { @@ -114,7 +101,6 @@ const useFeatureCaseStore = defineStore('featureCase', { getSystemCaseLevelFields() { return this.defaultFields.find((item: any) => item.internal && item.fieldName === '用例等级')?.options || []; }, - // 获取详情 async getCaseCounts(caseId: string) { try { @@ -144,6 +130,43 @@ const useFeatureCaseStore = defineStore('featureCase', { console.log(error); } }, + async initContentTabList(arr: TabItemType[]) { + try { + const tabsMap = await localforage.getItem('caseTabsMap'); + if (tabsMap) { + const { backupTabList } = tabsMap; + const isEqual = isArraysEqualWithOrder(backupTabList, arr); + if (!isEqual) { + tabsMap.tabList = arr; + tabsMap.backupTabList = arr; + await localforage.setItem('caseTabsMap', tabsMap); + } + } else { + await localforage.setItem('caseTabsMap', { tabList: arr, backupTabList: arr }); + } + } catch (e) { + console.log(e); + } + }, + async getContentTabList() { + try { + const tabsMap = await localforage.getItem('caseTabsMap'); + if (tabsMap) { + return tabsMap.tabList; + } + return []; + } catch (e) { + console.log(e); + } + }, + async setContentTabList(arr: TabItemType[]) { + const tabsMap = await localforage.getItem('caseTabsMap'); + if (tabsMap) { + const tmpArrList = JSON.parse(JSON.stringify(arr)); + tabsMap.tabList = tmpArrList; + await localforage.setItem('caseTabsMap', tabsMap); + } + }, }, }); diff --git a/frontend/src/views/case-management/caseManagementFeature/components/caseDetailDrawer.vue b/frontend/src/views/case-management/caseManagementFeature/components/caseDetailDrawer.vue index c802629bdd..f1fc4b735d 100644 --- a/frontend/src/views/case-management/caseManagementFeature/components/caseDetailDrawer.vue +++ b/frontend/src/views/case-management/caseManagementFeature/components/caseDetailDrawer.vue @@ -100,14 +100,14 @@
- {{ t('caseManagement.featureCase.detail') }}
{{ t(tab.title) }}
@@ -252,7 +252,7 @@
- + diff --git a/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabChangeHistory.vue b/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabChangeHistory.vue index 4209b77185..bbe64160a8 100644 --- a/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabChangeHistory.vue +++ b/frontend/src/views/case-management/caseManagementFeature/components/tabContent/tabChangeHistory.vue @@ -112,13 +112,14 @@ title: 'caseManagement.featureCase.changeType', slotName: 'type', dataIndex: 'type', - width: 200, + width: 100, }, { title: 'caseManagement.featureCase.operator', dataIndex: 'createUserName', slotName: 'createUserName', width: 150, + showTooltip: true, }, { title: 'caseManagement.featureCase.tableColumnUpdateTime', diff --git a/frontend/src/views/project-management/projectAndPermission/menuManagement/components/falseAlermRule.vue b/frontend/src/views/project-management/projectAndPermission/menuManagement/components/falseAlermRule.vue index 03f6f1e427..259258e120 100644 --- a/frontend/src/views/project-management/projectAndPermission/menuManagement/components/falseAlermRule.vue +++ b/frontend/src/views/project-management/projectAndPermission/menuManagement/components/falseAlermRule.vue @@ -44,15 +44,15 @@