fix: restore menu form configuration fields
This commit is contained in:
@@ -15,6 +15,9 @@ export function getMenuTypeOptions() {
|
|||||||
value: 'embedded',
|
value: 'embedded',
|
||||||
},
|
},
|
||||||
{ type: 'warning', label: $t('menu.typeLink'), value: 'link' },
|
{ type: 'warning', label: $t('menu.typeLink'), value: 'link' },
|
||||||
|
{ type: 'primary', label: $t('menu.typeOnlineForm'), value: 'online_form' },
|
||||||
|
{ type: 'primary', label: $t('menu.typeOnlinePage'), value: 'online_page' },
|
||||||
|
{ type: 'primary', label: $t('menu.typeOnlineReport'), value: 'online_report' },
|
||||||
{ type: 'success', label: $t('menu.typeAgent'), value: 'agent' },
|
{ type: 'success', label: $t('menu.typeAgent'), value: 'agent' },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import {
|
|||||||
getAllMenuTreeApi,
|
getAllMenuTreeApi,
|
||||||
updateMenuApi,
|
updateMenuApi,
|
||||||
} from '#/api/core/menu';
|
} from '#/api/core/menu';
|
||||||
import { filterLightMenuTree } from '#/router/light-menu';
|
|
||||||
import { useAppContextStore } from '#/store/app-context';
|
import { useAppContextStore } from '#/store/app-context';
|
||||||
|
|
||||||
import { getMenuTypeOptions } from '../data';
|
import { getMenuTypeOptions } from '../data';
|
||||||
@@ -58,7 +57,7 @@ function processMenuData(menus: any[]): any[] {
|
|||||||
async function getMenuListProcessed() {
|
async function getMenuListProcessed() {
|
||||||
const applicationId = appContextStore.currentApp?.id;
|
const applicationId = appContextStore.currentApp?.id;
|
||||||
const data = await getAllMenuTreeApi(applicationId);
|
const data = await getAllMenuTreeApi(applicationId);
|
||||||
return processMenuData(filterLightMenuTree(data));
|
return processMenuData(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,7 +78,53 @@ async function isMenuPathExists(path: string, excludeId?: string) {
|
|||||||
return result.exists;
|
return result.exists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ONLINE_COMPONENT_MAP: Record<string, string> = {
|
||||||
|
online_form: 'online-dev/form-render/index',
|
||||||
|
online_page: '/_core/page-render/index',
|
||||||
|
online_report: 'online-dev/report-render/index',
|
||||||
|
};
|
||||||
|
|
||||||
|
function resolveFormCode(menuData: Record<string, any>): string | undefined {
|
||||||
|
return (
|
||||||
|
menuData.query?.formCode ??
|
||||||
|
menuData.path?.match(/^\/form-render\/([^/]+)$/)?.[1]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolvePageCode(menuData: Record<string, any>): string | undefined {
|
||||||
|
return (
|
||||||
|
menuData.query?.pageCode ??
|
||||||
|
menuData.path?.match(/^\/page-render\/([^/]+)$/)?.[1]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveReportCode(menuData: Record<string, any>): string | undefined {
|
||||||
|
return (
|
||||||
|
menuData.query?.reportCode ??
|
||||||
|
menuData.path?.match(/^\/report-render\/([^/]+)$/)?.[1]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function normalizeMenuFormFields(menuData: Record<string, any>) {
|
function normalizeMenuFormFields(menuData: Record<string, any>) {
|
||||||
|
switch (menuData.type) {
|
||||||
|
case 'online_form': {
|
||||||
|
menuData.formCode = resolveFormCode(menuData);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'online_page': {
|
||||||
|
menuData.pageCode = resolvePageCode(menuData);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'online_report': {
|
||||||
|
menuData.reportCode = resolveReportCode(menuData);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// No default
|
||||||
|
}
|
||||||
|
if (ONLINE_COMPONENT_MAP[menuData.type]) {
|
||||||
|
menuData.onlineComponentPath =
|
||||||
|
menuData.component || ONLINE_COMPONENT_MAP[menuData.type];
|
||||||
|
}
|
||||||
return menuData;
|
return menuData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,13 +146,16 @@ const componentKeys = [
|
|||||||
'/_core/fallback/forbidden',
|
'/_core/fallback/forbidden',
|
||||||
'/_core/fallback/not-found',
|
'/_core/fallback/not-found',
|
||||||
'/_core/menu/index',
|
'/_core/menu/index',
|
||||||
|
'/_core/page-render/index',
|
||||||
'/_core/permission/index',
|
'/_core/permission/index',
|
||||||
'/_core/role/index',
|
'/_core/role/index',
|
||||||
'/_core/user/index',
|
'/_core/user/index',
|
||||||
|
'/ai-platform/agent/editor/index',
|
||||||
'/ai-platform/agent/index',
|
'/ai-platform/agent/index',
|
||||||
'/ai-platform/knowledge/detail/index',
|
'/ai-platform/knowledge/detail/index',
|
||||||
'/ai-platform/knowledge/index',
|
'/ai-platform/knowledge/index',
|
||||||
'/ai-platform/model/index',
|
'/ai-platform/model/index',
|
||||||
|
'/ai-platform/workflow/editor/index',
|
||||||
'/ai-platform/workflow/index',
|
'/ai-platform/workflow/index',
|
||||||
'/ai-platform/workflow-runs/index',
|
'/ai-platform/workflow-runs/index',
|
||||||
];
|
];
|
||||||
@@ -224,7 +272,15 @@ function getFormSchema(
|
|||||||
},
|
},
|
||||||
dependencies: {
|
dependencies: {
|
||||||
show: (values) => {
|
show: (values) => {
|
||||||
return ['agent', 'catalog', 'embedded', 'menu'].includes(values.type);
|
return [
|
||||||
|
'agent',
|
||||||
|
'catalog',
|
||||||
|
'embedded',
|
||||||
|
'menu',
|
||||||
|
'online_form',
|
||||||
|
'online_page',
|
||||||
|
'online_report',
|
||||||
|
].includes(values.type);
|
||||||
},
|
},
|
||||||
triggerFields: ['type'],
|
triggerFields: ['type'],
|
||||||
},
|
},
|
||||||
@@ -300,7 +356,15 @@ function getFormSchema(
|
|||||||
},
|
},
|
||||||
dependencies: {
|
dependencies: {
|
||||||
show: (values) => {
|
show: (values) => {
|
||||||
return ['catalog', 'embedded', 'link', 'menu'].includes(values.type);
|
return [
|
||||||
|
'catalog',
|
||||||
|
'embedded',
|
||||||
|
'link',
|
||||||
|
'menu',
|
||||||
|
'online_form',
|
||||||
|
'online_page',
|
||||||
|
'online_report',
|
||||||
|
].includes(values.type);
|
||||||
},
|
},
|
||||||
triggerFields: ['type'],
|
triggerFields: ['type'],
|
||||||
},
|
},
|
||||||
@@ -315,7 +379,15 @@ function getFormSchema(
|
|||||||
},
|
},
|
||||||
dependencies: {
|
dependencies: {
|
||||||
show: (values) => {
|
show: (values) => {
|
||||||
return ['agent', 'catalog', 'embedded', 'menu'].includes(values.type);
|
return [
|
||||||
|
'agent',
|
||||||
|
'catalog',
|
||||||
|
'embedded',
|
||||||
|
'menu',
|
||||||
|
'online_form',
|
||||||
|
'online_page',
|
||||||
|
'online_report',
|
||||||
|
].includes(values.type);
|
||||||
},
|
},
|
||||||
triggerFields: ['type'],
|
triggerFields: ['type'],
|
||||||
},
|
},
|
||||||
@@ -343,6 +415,66 @@ function getFormSchema(
|
|||||||
fieldName: 'component',
|
fieldName: 'component',
|
||||||
label: $t('menu.component'),
|
label: $t('menu.component'),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
component: 'Input',
|
||||||
|
fieldName: 'formCode',
|
||||||
|
hide: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
component: 'Input',
|
||||||
|
componentProps: {
|
||||||
|
clearable: true,
|
||||||
|
class: 'w-full',
|
||||||
|
placeholder: $t('ui.placeholder.input'),
|
||||||
|
},
|
||||||
|
dependencies: {
|
||||||
|
rules: (values) => {
|
||||||
|
return values.type === 'online_page' ? 'required' : null;
|
||||||
|
},
|
||||||
|
show: (values) => {
|
||||||
|
return values.type === 'online_page';
|
||||||
|
},
|
||||||
|
triggerFields: ['type'],
|
||||||
|
},
|
||||||
|
fieldName: 'pageCode',
|
||||||
|
label: $t('menu.pageCode'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
component: 'Input',
|
||||||
|
componentProps: {
|
||||||
|
clearable: true,
|
||||||
|
class: 'w-full',
|
||||||
|
placeholder: $t('ui.placeholder.input'),
|
||||||
|
},
|
||||||
|
dependencies: {
|
||||||
|
rules: (values) => {
|
||||||
|
return values.type === 'online_report' ? 'required' : null;
|
||||||
|
},
|
||||||
|
show: (values) => {
|
||||||
|
return values.type === 'online_report';
|
||||||
|
},
|
||||||
|
triggerFields: ['type'],
|
||||||
|
},
|
||||||
|
fieldName: 'reportCode',
|
||||||
|
label: $t('menu.reportCode'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
component: 'Input',
|
||||||
|
componentProps: {
|
||||||
|
disabled: true,
|
||||||
|
class: 'w-full',
|
||||||
|
},
|
||||||
|
dependencies: {
|
||||||
|
show: (values) => {
|
||||||
|
return ['online_form', 'online_page', 'online_report'].includes(
|
||||||
|
values.type,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
triggerFields: ['type'],
|
||||||
|
},
|
||||||
|
fieldName: 'onlineComponentPath',
|
||||||
|
label: $t('menu.componentPath'),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
component: 'ApiSelect',
|
component: 'ApiSelect',
|
||||||
componentProps: {
|
componentProps: {
|
||||||
@@ -489,7 +621,13 @@ function getFormSchema(
|
|||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
dependencies: {
|
dependencies: {
|
||||||
show: (values) => {
|
show: (values) => {
|
||||||
return ['agent', 'menu'].includes(values.type);
|
return [
|
||||||
|
'agent',
|
||||||
|
'menu',
|
||||||
|
'online_form',
|
||||||
|
'online_page',
|
||||||
|
'online_report',
|
||||||
|
].includes(values.type);
|
||||||
},
|
},
|
||||||
triggerFields: ['type'],
|
triggerFields: ['type'],
|
||||||
},
|
},
|
||||||
@@ -509,7 +647,14 @@ function getFormSchema(
|
|||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
dependencies: {
|
dependencies: {
|
||||||
show: (values) => {
|
show: (values) => {
|
||||||
return ['agent', 'embedded', 'menu'].includes(values.type);
|
return [
|
||||||
|
'agent',
|
||||||
|
'embedded',
|
||||||
|
'menu',
|
||||||
|
'online_form',
|
||||||
|
'online_page',
|
||||||
|
'online_report',
|
||||||
|
].includes(values.type);
|
||||||
},
|
},
|
||||||
triggerFields: ['type'],
|
triggerFields: ['type'],
|
||||||
},
|
},
|
||||||
@@ -609,7 +754,14 @@ function getFormSchema(
|
|||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
dependencies: {
|
dependencies: {
|
||||||
show: (values) => {
|
show: (values) => {
|
||||||
return ['agent', 'embedded', 'menu'].includes(values.type);
|
return [
|
||||||
|
'agent',
|
||||||
|
'embedded',
|
||||||
|
'menu',
|
||||||
|
'online_form',
|
||||||
|
'online_page',
|
||||||
|
'online_report',
|
||||||
|
].includes(values.type);
|
||||||
},
|
},
|
||||||
triggerFields: ['type'],
|
triggerFields: ['type'],
|
||||||
},
|
},
|
||||||
@@ -629,7 +781,13 @@ function getFormSchema(
|
|||||||
defaultValue: true,
|
defaultValue: true,
|
||||||
dependencies: {
|
dependencies: {
|
||||||
show: (values) => {
|
show: (values) => {
|
||||||
return ['agent', 'menu'].includes(values.type);
|
return [
|
||||||
|
'agent',
|
||||||
|
'menu',
|
||||||
|
'online_form',
|
||||||
|
'online_page',
|
||||||
|
'online_report',
|
||||||
|
].includes(values.type);
|
||||||
},
|
},
|
||||||
triggerFields: ['type'],
|
triggerFields: ['type'],
|
||||||
},
|
},
|
||||||
@@ -727,9 +885,55 @@ async function onUpdate() {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'online_form': {
|
||||||
|
data.query = { formCode: data.formCode };
|
||||||
|
data.component = ONLINE_COMPONENT_MAP.online_form;
|
||||||
|
if (
|
||||||
|
data.formCode &&
|
||||||
|
(!data.path || data.path.startsWith('/form-render/'))
|
||||||
|
) {
|
||||||
|
data.path = `/form-render/${data.formCode}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'online_page': {
|
||||||
|
data.query = { pageCode: data.pageCode };
|
||||||
|
data.component = ONLINE_COMPONENT_MAP.online_page;
|
||||||
|
if (
|
||||||
|
data.pageCode &&
|
||||||
|
(!data.path || data.path.startsWith('/page-render/'))
|
||||||
|
) {
|
||||||
|
data.path = `/page-render/${data.pageCode}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'online_report': {
|
||||||
|
const prevQuery = formData.value?.query || {};
|
||||||
|
data.query = {
|
||||||
|
relationId: prevQuery.relationId ?? prevQuery.templateId,
|
||||||
|
moduleId: prevQuery.moduleId ?? prevQuery.templateId,
|
||||||
|
templateId: prevQuery.templateId ?? prevQuery.relationId,
|
||||||
|
reportCode: data.reportCode,
|
||||||
|
};
|
||||||
|
data.component = ONLINE_COMPONENT_MAP.online_report;
|
||||||
|
if (data.reportCode) {
|
||||||
|
data.authCode = `report:${data.reportCode}:preview`;
|
||||||
|
if (!data.path || data.path.startsWith('/report-render/')) {
|
||||||
|
data.path = `/report-render/${data.reportCode}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
// No default
|
// No default
|
||||||
}
|
}
|
||||||
delete data.linkSrc;
|
delete data.linkSrc;
|
||||||
|
delete data.formCode;
|
||||||
|
delete data.pageCode;
|
||||||
|
delete data.reportCode;
|
||||||
|
delete data.onlineComponentPath;
|
||||||
|
|
||||||
// 确保 parent_id 清空时发送 null 而不是 undefined
|
// 确保 parent_id 清空时发送 null 而不是 undefined
|
||||||
if (data.parent_id === undefined || data.parent_id === '') {
|
if (data.parent_id === undefined || data.parent_id === '') {
|
||||||
|
|||||||
Reference in New Issue
Block a user