Trim online menu defaults from lightweight admin

This commit is contained in:
2026-06-08 21:18:16 +08:00
parent 9ecffde2ed
commit c52ab8fb3a
4 changed files with 10 additions and 224 deletions
+1 -1
View File
@@ -203,7 +203,7 @@ function setupAccessGuard(router: Router) {
if (to.path === subAppRootPath) { if (to.path === subAppRootPath) {
const defaultHome = const defaultHome =
preferences.app.defaultHomePath || '/page-render/main_home'; preferences.app.defaultHomePath || '/control-center';
// 确保路径包含子应用前缀 // 确保路径包含子应用前缀
const subAppTargetPath = defaultHome.startsWith(subAppRootPath) const subAppTargetPath = defaultHome.startsWith(subAppRootPath)
? defaultHome ? defaultHome
@@ -15,9 +15,6 @@ 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,8 +26,6 @@ import {
getAllMenuTreeApi, getAllMenuTreeApi,
updateMenuApi, updateMenuApi,
} from '#/api/core/menu'; } from '#/api/core/menu';
import { getPageListApi } from '#/api/online-dev/page-manager';
import { getReportListApi } from '#/api/online-dev/report-manager';
import { componentKeys } from '#/router/routes'; import { componentKeys } from '#/router/routes';
import { useAppContextStore } from '#/store/app-context'; import { useAppContextStore } from '#/store/app-context';
@@ -81,46 +79,7 @@ async function isMenuPathExists(path: string, excludeId?: string) {
return result.exists; return result.exists;
} }
const ONLINE_COMPONENT_MAP: Record<string, string> = { function normalizeMenuFormFields(menuData: Record<string, any>) {
online_form: 'online-dev/form-render/index',
online_page: 'online-dev/page-render/index',
online_report: 'online-dev/report-render/index',
};
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 applyOnlineMenuTypeFields(menuData: Record<string, any>) {
switch (menuData.type) {
case 'online_form': {
menuData.formCode = menuData.query?.formCode;
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;
} }
@@ -251,9 +210,6 @@ function getFormSchema(
'catalog', 'catalog',
'embedded', 'embedded',
'menu', 'menu',
'online_form',
'online_page',
'online_report',
].includes(values.type); ].includes(values.type);
}, },
triggerFields: ['type'], triggerFields: ['type'],
@@ -335,9 +291,6 @@ function getFormSchema(
'embedded', 'embedded',
'link', 'link',
'menu', 'menu',
'online_form',
'online_page',
'online_report',
].includes(values.type); ].includes(values.type);
}, },
triggerFields: ['type'], triggerFields: ['type'],
@@ -358,9 +311,6 @@ function getFormSchema(
'catalog', 'catalog',
'embedded', 'embedded',
'menu', 'menu',
'online_form',
'online_page',
'online_report',
].includes(values.type); ].includes(values.type);
}, },
triggerFields: ['type'], triggerFields: ['type'],
@@ -389,86 +339,6 @@ function getFormSchema(
fieldName: 'component', fieldName: 'component',
label: $t('menu.component'), label: $t('menu.component'),
}, },
{
component: 'Input',
fieldName: 'formCode',
hide: true,
},
{
component: 'ApiSelect',
componentProps: {
api: async () => {
const res = await getPageListApi({
status: 'published',
pageSize: 100,
});
return res.items.map((item) => ({
label: `${item.name} (${item.code})`,
value: item.code,
}));
},
class: 'w-full',
filterable: true,
placeholder: $t('ui.placeholder.select'),
},
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: 'ApiSelect',
componentProps: {
api: async () => {
const res = await getReportListApi({
pageSize: 500,
applicationId: appContextStore.currentApp?.id,
});
return res.items.map((item) => ({
label: `${item.name} (${item.code})`,
value: item.code,
}));
},
class: 'w-full',
filterable: true,
placeholder: $t('ui.placeholder.select'),
},
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: {
@@ -506,29 +376,6 @@ function getFormSchema(
label: $t('menu.linkSrc'), label: $t('menu.linkSrc'),
rules: z.string().url($t('ui.formRules.invalidURL')), rules: z.string().url($t('ui.formRules.invalidURL')),
}, },
// {
// component: 'Input',
// componentProps: {
// clearable: true,
// },
// dependencies: {
// rules: (values) => {
// return values.type === 'button' ? 'required' : null;
// },
// show: (values) => {
// return [
// 'catalog',
// 'embedded',
// 'menu',
// 'online_form',
// 'online_page',
// ].includes(values.type);
// },
// triggerFields: ['type'],
// },
// fieldName: 'authCode',
// label: $t('menu.authCode'),
// },
{ {
component: 'RadioGroup', component: 'RadioGroup',
componentProps: { componentProps: {
@@ -638,13 +485,7 @@ function getFormSchema(
defaultValue: false, defaultValue: false,
dependencies: { dependencies: {
show: (values) => { show: (values) => {
return [ return ['agent', 'menu'].includes(values.type);
'agent',
'menu',
'online_form',
'online_page',
'online_report',
].includes(values.type);
}, },
triggerFields: ['type'], triggerFields: ['type'],
}, },
@@ -664,14 +505,7 @@ function getFormSchema(
defaultValue: false, defaultValue: false,
dependencies: { dependencies: {
show: (values) => { show: (values) => {
return [ return ['agent', 'embedded', 'menu'].includes(values.type);
'agent',
'embedded',
'menu',
'online_form',
'online_page',
'online_report',
].includes(values.type);
}, },
triggerFields: ['type'], triggerFields: ['type'],
}, },
@@ -771,14 +605,7 @@ function getFormSchema(
defaultValue: false, defaultValue: false,
dependencies: { dependencies: {
show: (values) => { show: (values) => {
return [ return ['agent', 'embedded', 'menu'].includes(values.type);
'agent',
'embedded',
'menu',
'online_form',
'online_page',
'online_report',
].includes(values.type);
}, },
triggerFields: ['type'], triggerFields: ['type'],
}, },
@@ -798,13 +625,7 @@ function getFormSchema(
defaultValue: true, defaultValue: true,
dependencies: { dependencies: {
show: (values) => { show: (values) => {
return [ return ['agent', 'menu'].includes(values.type);
'agent',
'menu',
'online_form',
'online_page',
'online_report',
].includes(values.type);
}, },
triggerFields: ['type'], triggerFields: ['type'],
}, },
@@ -870,7 +691,7 @@ function onCancel() {
formApi.setState({ commonConfig: { disabled: true } }); formApi.setState({ commonConfig: { disabled: true } });
// 重新加载表单数据 // 重新加载表单数据
if (props.menu) { if (props.menu) {
const menuData = applyOnlineMenuTypeFields({ ...props.menu }); const menuData = normalizeMenuFormFields({ ...props.menu });
if (menuData.type === 'embedded') { if (menuData.type === 'embedded') {
(menuData as any).linkSrc = menuData.iframeSrc; (menuData as any).linkSrc = menuData.iframeSrc;
} else if (menuData.type === 'link') { } else if (menuData.type === 'link') {
@@ -902,41 +723,9 @@ async function onUpdate() {
break; break;
} }
case 'online_form': {
data.query = { formCode: data.formCode };
data.component = 'online-dev/form-render/index';
break;
}
case 'online_page': {
data.query = { pageCode: data.pageCode };
data.component = 'online-dev/page-render/index';
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-dev/report-render/index';
if (data.reportCode) {
data.authCode = `report:${data.reportCode}:preview`;
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 === '') {
@@ -970,7 +759,7 @@ async function onUpdate() {
function onReset() { function onReset() {
// 重新加载原始数据 // 重新加载原始数据
if (props.menu) { if (props.menu) {
const menuData = applyOnlineMenuTypeFields({ ...props.menu }); const menuData = normalizeMenuFormFields({ ...props.menu });
if (menuData.type === 'embedded') { if (menuData.type === 'embedded') {
(menuData as any).linkSrc = menuData.iframeSrc; (menuData as any).linkSrc = menuData.iframeSrc;
} else if (menuData.type === 'link') { } else if (menuData.type === 'link') {
@@ -986,7 +775,7 @@ watch(
(newMenu) => { (newMenu) => {
isEditMode.value = false; // 切换菜单时退出编辑模式 isEditMode.value = false; // 切换菜单时退出编辑模式
if (newMenu?.id) { if (newMenu?.id) {
const menuData = applyOnlineMenuTypeFields({ ...newMenu }); const menuData = normalizeMenuFormFields({ ...newMenu });
if (menuData.type === 'embedded') { if (menuData.type === 'embedded') {
(menuData as any).linkSrc = menuData.iframeSrc; (menuData as any).linkSrc = menuData.iframeSrc;
} else if (menuData.type === 'link') { } else if (menuData.type === 'link') {
@@ -106,7 +106,7 @@ function getDefaultConfig() {
defaultHomePath: defaultHomePath:
overrides.app?.defaultHomePath || overrides.app?.defaultHomePath ||
preferences.app.defaultHomePath || preferences.app.defaultHomePath ||
'/page-render/main_home', '/control-center',
enablePreferences: overrides.app?.enablePreferences ?? true, enablePreferences: overrides.app?.enablePreferences ?? true,
}, },
footer: { footer: {