fix(功能用例): 用例评审-刷新脑图时模块树数量不是最新的

This commit is contained in:
teukkk 2024-07-09 16:08:15 +08:00 committed by 刘瑞斌
parent 695f18fe47
commit 510bea2c95
5 changed files with 74 additions and 85 deletions

View File

@ -142,6 +142,7 @@
import { useI18n } from '@/hooks/useI18n';
import { useUserStore } from '@/store';
import useAppStore from '@/store/modules/app';
import useCaseReviewStore from '@/store/modules/case/caseReview';
import useMinderStore from '@/store/modules/components/minder-editor/index';
import { findNodeByKey, mapTree, replaceNodeInTree } from '@/utils';
import { hasAnyPermission } from '@/utils/permission';
@ -150,7 +151,6 @@
CaseReviewFunctionalCaseUserItem,
ReviewHistoryItem,
ReviewPassRule,
ReviewResult as ReviewResultStatus,
} from '@/models/caseManagement/caseReview';
import { ModuleTreeNode } from '@/models/common';
import { MinderEventName } from '@/enums/minderEnum';
@ -159,7 +159,6 @@
const props = defineProps<{
moduleId: string;
modulesCount: Record<string, number>; //
viewFlag: boolean; //
viewStatusFlag: boolean; //
reviewProgress: string;
@ -177,6 +176,7 @@
const { t } = useI18n();
const minderStore = useMinderStore();
const userStore = useUserStore();
const caseReviewStore = useCaseReviewStore();
const statusTagMap: Record<string, string> = {
PASS: t('common.pass'),
@ -193,6 +193,8 @@
});
const loading = ref(false);
const modulesCount = computed(() => caseReviewStore.modulesCount);
/**
* 初始化用例模块树
*/
@ -203,13 +205,13 @@
...e.data,
id: e.id || e.data?.id || '',
text: e.name || e.data?.text || '',
resource: props.modulesCount[e.id] !== undefined ? [moduleTag] : e.data?.resource,
resource: modulesCount.value[e.id] !== undefined ? [moduleTag] : e.data?.resource,
expandState: e.level === 0 ? 'expand' : 'collapse',
count: props.modulesCount[e.id],
count: modulesCount.value[e.id],
disabled: true,
},
children:
props.modulesCount[e.id] > 0 && !e.children?.length
modulesCount.value[e.id] > 0 && !e.children?.length
? [
{
data: {

View File

@ -116,7 +116,7 @@ export interface ReviewListQueryParams extends TableQueryParams {
export interface ReviewDetailCaseListQueryParams extends TableQueryParams {
viewFlag: boolean; // 是否只看我的
reviewId: string;
viewStatusFlag: boolean; // 我的评审状态
viewStatusFlag?: boolean; // 我的评审状态
}
// 评审详情-用例拖拽排序入参
export interface SortReviewCaseParams {

View File

@ -0,0 +1,25 @@
import { defineStore } from 'pinia';
import { getReviewDetailModuleCount } from '@/api/modules/case-management/caseReview';
import type { ReviewDetailCaseListQueryParams } from '@/models/caseManagement/caseReview';
const useCaseReviewStore = defineStore('caseReview', {
state: (): {
modulesCount: Record<string, any>; // 用例树模块数量
} => ({
modulesCount: {},
}),
actions: {
async getModuleCount(params: ReviewDetailCaseListQueryParams) {
try {
this.modulesCount = await getReviewDetailModuleCount(params);
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
}
},
},
});
export default useCaseReviewStore;

View File

@ -5,7 +5,7 @@
v-model:keyword="keyword"
:filter-config-list="filterConfigList"
:row-count="filterRowCount"
:count="props.modulesCount[props.activeFolder] || 0"
:count="modulesCount[props.activeFolder] || 0"
:name="moduleNamePath"
:not-show-input-search="showType !== 'list'"
:search-placeholder="t('caseManagement.caseReview.searchPlaceholder')"
@ -139,7 +139,6 @@
:view-flag="props.onlyMine"
:view-status-flag="onlyMineStatus"
:module-tree="props.moduleTree"
:modules-count="props.modulesCount"
:review-progress="props.reviewProgress"
:review-pass-rule="props.reviewPassRule"
@operation="handleMinderOperation"
@ -332,12 +331,13 @@
import useModal from '@/hooks/useModal';
import useTableStore from '@/hooks/useTableStore';
import useAppStore from '@/store/modules/app';
import useCaseReviewStore from '@/store/modules/case/caseReview';
import useUserStore from '@/store/modules/user';
import { characterLimit, findNodeByKey } from '@/utils';
import { hasAnyPermission } from '@/utils/permission';
import { ReviewCaseItem, ReviewItem, ReviewPassRule, ReviewResult } from '@/models/caseManagement/caseReview';
import { BatchApiParams, ModuleTreeNode } from '@/models/common';
import { BatchApiParams, ModuleTreeNode, TableQueryParams } from '@/models/common';
import { CaseManagementRouteEnum } from '@/enums/routeEnum';
import { TableKeyEnum } from '@/enums/tableEnum';
import { FilterSlotNameEnum } from '@/enums/tableFilterEnum';
@ -355,10 +355,9 @@
reviewPassRule: ReviewPassRule; //
offspringIds: string[]; // id
moduleTree: ModuleTreeNode[];
modulesCount: Record<string, number>; //
reviewProgress: string; //
}>();
const emit = defineEmits(['init', 'refresh', 'link']);
const emit = defineEmits(['refresh', 'link']);
const router = useRouter();
const route = useRoute();
@ -367,6 +366,7 @@
const userStore = useUserStore();
const { t } = useI18n();
const { openModal } = useModal();
const caseReviewStore = useCaseReviewStore();
const minderSelectData = ref<MinderJsonNodeData>(); //
const minderParams = ref();
@ -514,6 +514,23 @@
],
};
const modulesCount = computed(() => caseReviewStore.modulesCount);
async function getModuleCount() {
let params: TableQueryParams;
if (showType.value === 'list') {
params = {
...tableParams.value,
current: propsRes.value.msPagination?.current,
pageSize: propsRes.value.msPagination?.pageSize,
total: propsRes.value.msPagination?.total,
moduleIds: [],
};
} else {
params = { moduleIds: [props.activeFolder], projectId: appStore.currentProjectId, pageSize: 10, current: 1 };
}
await caseReviewStore.getModuleCount({ ...params, viewFlag: props.onlyMine, reviewId: route.query.id as string });
}
function searchCase(filter?: FilterResult) {
tableParams.value = {
projectId: appStore.currentProjectId,
@ -530,13 +547,7 @@
setLoadListParams(tableParams.value);
resetSelector();
loadList();
emit('init', {
...tableParams.value,
current: propsRes.value.msPagination?.current,
pageSize: propsRes.value.msPagination?.pageSize,
total: propsRes.value.msPagination?.total,
moduleIds: [],
});
getModuleCount();
}
onBeforeMount(() => {
@ -547,7 +558,7 @@
* 更新数据
* @param getCount 获取模块树数量
*/
function refresh(getCount = true) {
async function refresh(getCount = true) {
if (showType.value === 'list') {
if (getCount) {
searchCase();
@ -556,34 +567,10 @@
loadList();
}
} else {
msCaseReviewMinderRef.value?.initCaseTree();
if (getCount) {
emit('init', {
moduleIds: [props.activeFolder],
projectId: appStore.currentProjectId,
pageSize: 10,
current: 1,
});
await getModuleCount();
}
}
}
function emitRefresh() {
if (showType.value === 'list') {
emit('refresh', {
...tableParams.value,
current: propsRes.value.msPagination?.current,
pageSize: propsRes.value.msPagination?.pageSize,
total: propsRes.value.msPagination?.total,
moduleIds: [],
});
} else {
emit('refresh', {
moduleIds: [props.activeFolder],
projectId: appStore.currentProjectId,
pageSize: 10,
current: 1,
});
msCaseReviewMinderRef.value?.initCaseTree();
}
}
@ -607,7 +594,7 @@
if (val === 'minder') {
keyword.value = '';
//
emit('init', { moduleIds: [props.activeFolder], projectId: appStore.currentProjectId, pageSize: 10, current: 1 });
getModuleCount();
} else {
searchCase();
}
@ -663,12 +650,13 @@
try {
disassociateLoading.value = true;
await disassociateReviewCase(route.query.id as string, record.caseId);
emitRefresh();
emit('refresh');
if (done) {
done();
}
Message.success(t('caseManagement.caseReview.disassociateSuccess'));
loadList();
getModuleCount();
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
@ -731,8 +719,9 @@
});
Message.success(t('common.updateSuccess'));
dialogLoading.value = false;
refresh(false);
emitRefresh();
refresh();
emit('refresh');
// TODO:
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
@ -789,7 +778,7 @@
Message.success(t('common.updateSuccess'));
dialogVisible.value = false;
refresh(false);
emitRefresh();
emit('refresh');
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
@ -852,7 +841,7 @@
Message.success(t('caseManagement.caseReview.reviewSuccess'));
dialogVisible.value = false;
resetSelector();
emitRefresh();
emit('refresh');
loadList();
} catch (error) {
// eslint-disable-next-line no-console
@ -925,7 +914,7 @@
function handleReviewDone() {
refresh(false);
emitRefresh();
emit('refresh');
}
/**

View File

@ -128,7 +128,6 @@
:modules-count="modulesCount"
:review-progress="reviewProgress"
:module-tree="moduleTree"
@init="initModulesCount"
@refresh="handleRefresh"
@link="associateDrawerVisible = true"
></CaseTable>
@ -165,23 +164,14 @@
import deleteReviewModal from './components/index/deleteReviewModal.vue';
import passRateLine from './components/passRateLine.vue';
import {
associateReviewCase,
followReview,
getReviewDetail,
getReviewDetailModuleCount,
} from '@/api/modules/case-management/caseReview';
import { associateReviewCase, followReview, getReviewDetail } from '@/api/modules/case-management/caseReview';
import { reviewDefaultDetail } from '@/config/caseManagement';
import { useI18n } from '@/hooks/useI18n';
import useAppStore from '@/store/modules/app';
import useCaseReviewStore from '@/store/modules/case/caseReview';
import useUserStore from '@/store/modules/user';
import type {
BaseAssociateCaseRequest,
ReviewDetailCaseListQueryParams,
ReviewItem,
ReviewStatus,
} from '@/models/caseManagement/caseReview';
import type { BaseAssociateCaseRequest, ReviewItem, ReviewStatus } from '@/models/caseManagement/caseReview';
import { ModuleTreeNode } from '@/models/common';
import { CaseManagementRouteEnum } from '@/enums/routeEnum';
@ -190,6 +180,7 @@
const userStore = useUserStore();
const appStore = useAppStore();
const { t } = useI18n();
const caseReviewStore = useCaseReviewStore();
const loading = ref(false);
const reviewDetail = ref<ReviewItem>({
@ -221,20 +212,7 @@
// },
// ]);
const modulesCount = ref<Record<string, any>>({});
async function getModuleCount(params: ReviewDetailCaseListQueryParams) {
try {
modulesCount.value = await getReviewDetailModuleCount({
...params,
viewFlag: onlyMine.value,
reviewId: reviewId.value,
});
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
}
}
const modulesCount = computed(() => caseReviewStore.modulesCount);
const folderTreeRef = ref<InstanceType<typeof CaseTree>>();
const activeFolderId = ref<string>('all');
@ -251,10 +229,6 @@
caseTableRef.value?.resetSelector();
}
function initModulesCount(params: ReviewDetailCaseListQueryParams) {
getModuleCount(params);
}
const associateDrawerVisible = ref(false);
const associateDrawerProject = ref(appStore.currentProjectId);
@ -396,8 +370,7 @@
});
}
function handleRefresh(params: ReviewDetailCaseListQueryParams) {
initModulesCount(params);
function handleRefresh() {
initDetail();
folderTreeRef.value?.initModules();
}