fix(脑图): 功能用例脑图新建模块下用例保存拦截
This commit is contained in:
parent
ada7ddffdd
commit
b402c165e0
|
@ -35,14 +35,17 @@
|
||||||
</a-form>
|
</a-form>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="hasEditPermission" class="flex items-center gap-[12px] bg-[var(--color-text-fff)] py-[16px]">
|
<div v-if="hasEditPermission" class="flex items-center gap-[12px] bg-[var(--color-text-fff)] py-[16px]">
|
||||||
|
<a-tooltip :content="t('ms.minders.moduleNewTip')" :disabled="!props.activeCase.moduleIsNew">
|
||||||
<a-button
|
<a-button
|
||||||
v-permission="['FUNCTIONAL_CASE:READ+UPDATE']"
|
v-permission="['FUNCTIONAL_CASE:READ+UPDATE']"
|
||||||
type="primary"
|
type="primary"
|
||||||
:loading="saveLoading"
|
:loading="saveLoading"
|
||||||
|
:disabled="props.activeCase.moduleIsNew"
|
||||||
@click="handleSave"
|
@click="handleSave"
|
||||||
>
|
>
|
||||||
{{ t('common.save') }}
|
{{ t('common.save') }}
|
||||||
</a-button>
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
<a-button type="secondary" :disabled="saveLoading" @click="handleCancel">{{ t('common.cancel') }}</a-button>
|
<a-button type="secondary" :disabled="saveLoading" @click="handleCancel">{{ t('common.cancel') }}</a-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
:can-show-batch-delete="true"
|
:can-show-batch-delete="true"
|
||||||
:priority-tooltip="t('caseManagement.caseReview.caseLevel')"
|
:priority-tooltip="t('caseManagement.caseReview.caseLevel')"
|
||||||
:disabled="!hasEditPermission"
|
:disabled="!hasEditPermission"
|
||||||
|
:disabled-extra-tab="!!activeCase.moduleIsNew"
|
||||||
can-show-more-batch-menu
|
can-show-more-batch-menu
|
||||||
single-tag
|
single-tag
|
||||||
tag-enable
|
tag-enable
|
||||||
|
@ -426,6 +427,7 @@
|
||||||
id: data.id,
|
id: data.id,
|
||||||
name: data.text,
|
name: data.text,
|
||||||
moduleId: node.parent?.data?.id || '',
|
moduleId: node.parent?.data?.id || '',
|
||||||
|
moduleIsNew: !!node.parent?.data?.isNew, // 标记父模块节点是否为新建
|
||||||
isNew: true,
|
isNew: true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ export default {
|
||||||
'ms.minders.createChildCase': 'Insert child Case',
|
'ms.minders.createChildCase': 'Insert child Case',
|
||||||
'ms.minders.moreCase': 'More Cases...',
|
'ms.minders.moreCase': 'More Cases...',
|
||||||
'ms.minders.moreModule': 'More Modules...',
|
'ms.minders.moreModule': 'More Modules...',
|
||||||
|
'ms.minders.moduleNewTip':
|
||||||
|
'The module node to which the current use case belongs has not been saved. Please save the mind map first',
|
||||||
// 测试规划脑图文案
|
// 测试规划脑图文案
|
||||||
'ms.minders.failStop': 'Failure stop',
|
'ms.minders.failStop': 'Failure stop',
|
||||||
'ms.minders.failRetry': 'Retry on failure',
|
'ms.minders.failRetry': 'Retry on failure',
|
||||||
|
|
|
@ -17,6 +17,7 @@ export default {
|
||||||
'ms.minders.createChildCase': '添加子级用例',
|
'ms.minders.createChildCase': '添加子级用例',
|
||||||
'ms.minders.moreCase': '更多用例...',
|
'ms.minders.moreCase': '更多用例...',
|
||||||
'ms.minders.moreModule': '更多模块...',
|
'ms.minders.moreModule': '更多模块...',
|
||||||
|
'ms.minders.moduleNewTip': '当前用例所属模块节点未保存,请先保存脑图',
|
||||||
// 测试规划脑图文案
|
// 测试规划脑图文案
|
||||||
'ms.minders.failStop': '失败停止',
|
'ms.minders.failStop': '失败停止',
|
||||||
'ms.minders.failRetry': '失败重试',
|
'ms.minders.failRetry': '失败重试',
|
||||||
|
|
|
@ -182,6 +182,7 @@ export default function useMinderOperation(options: MinderOperationProps) {
|
||||||
// 由于粘贴逻辑中为了排除子节点重新排序导致逆序,因此复制的时候倒过来
|
// 由于粘贴逻辑中为了排除子节点重新排序导致逆序,因此复制的时候倒过来
|
||||||
for (let i = noFakeNodeTree.length - 1; i >= 0; i--) {
|
for (let i = noFakeNodeTree.length - 1; i >= 0; i--) {
|
||||||
_node = minder.createNode(null, node);
|
_node = minder.createNode(null, node);
|
||||||
|
_node.setData({ isNew: true });
|
||||||
minder.importNode(_node, noFakeNodeTree[i]);
|
minder.importNode(_node, noFakeNodeTree[i]);
|
||||||
selectedNodes.push(_node);
|
selectedNodes.push(_node);
|
||||||
node.appendChild(_node);
|
node.appendChild(_node);
|
||||||
|
|
|
@ -21,7 +21,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="ms-minder-editor-extra" :class="[extraVisible ? 'ms-minder-editor-extra--visible' : '']">
|
<div class="ms-minder-editor-extra" :class="[extraVisible ? 'ms-minder-editor-extra--visible' : '']">
|
||||||
<div v-if="props.extractContentTabList?.length" class="pl-[16px] pt-[16px]">
|
<div v-if="props.extractContentTabList?.length" class="pl-[16px] pt-[16px]">
|
||||||
<MsTab v-model:activeKey="activeExtraKey" :content-tab-list="props.extractContentTabList" mode="button" />
|
<MsTab
|
||||||
|
v-model:activeKey="activeExtraKey"
|
||||||
|
:content-tab-list="props.extractContentTabList"
|
||||||
|
mode="button"
|
||||||
|
:disabled="props.disabledExtraTab"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="ms-minder-editor-extra-content">
|
<div class="ms-minder-editor-extra-content">
|
||||||
<slot name="extractTabContent"></slot>
|
<slot name="extractTabContent"></slot>
|
||||||
|
|
|
@ -64,6 +64,7 @@ export const mainEditorProps = {
|
||||||
minderKey: String as PropType<MinderKeyEnum>,
|
minderKey: String as PropType<MinderKeyEnum>,
|
||||||
disabled: Boolean,
|
disabled: Boolean,
|
||||||
extractContentTabList: Array as PropType<{ label: string; value: string }[]>,
|
extractContentTabList: Array as PropType<{ label: string; value: string }[]>,
|
||||||
|
disabledExtraTab: Boolean,
|
||||||
insertNode: {
|
insertNode: {
|
||||||
type: Function as PropType<(node: MinderJsonNode, type: string, value?: string) => void>,
|
type: Function as PropType<(node: MinderJsonNode, type: string, value?: string) => void>,
|
||||||
default: undefined,
|
default: undefined,
|
||||||
|
|
|
@ -5,7 +5,12 @@
|
||||||
:class="[props.class, props.noContent ? 'no-content' : '']"
|
:class="[props.class, props.noContent ? 'no-content' : '']"
|
||||||
@change="(val) => handleTabClick(val as string)"
|
@change="(val) => handleTabClick(val as string)"
|
||||||
>
|
>
|
||||||
<a-tab-pane v-for="item of props.contentTabList" :key="item.value" :title="`${item.label}`">
|
<a-tab-pane
|
||||||
|
v-for="item of props.contentTabList"
|
||||||
|
:key="item.value"
|
||||||
|
:title="`${item.label}`"
|
||||||
|
:disabled="props.disabled"
|
||||||
|
>
|
||||||
<template v-if="props.showBadge" #title>
|
<template v-if="props.showBadge" #title>
|
||||||
<a-badge
|
<a-badge
|
||||||
v-if="props.getTextFunc(item.value) !== ''"
|
v-if="props.getTextFunc(item.value) !== ''"
|
||||||
|
@ -50,6 +55,7 @@
|
||||||
showBadge?: boolean;
|
showBadge?: boolean;
|
||||||
changeInterceptor?: (newVal: string | number, oldVal: string | number, done: () => void) => void;
|
changeInterceptor?: (newVal: string | number, oldVal: string | number, done: () => void) => void;
|
||||||
buttonSize?: 'small' | 'default';
|
buttonSize?: 'small' | 'default';
|
||||||
|
disabled?: boolean;
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
mode: 'origin',
|
mode: 'origin',
|
||||||
|
|
Loading…
Reference in New Issue