Trim online menu defaults from lightweight admin
This commit is contained in:
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user