diff --git a/apps/jingrow/frontend/src/shared/api/workspace.ts b/apps/jingrow/frontend/src/shared/api/workspace.ts index 92b9079..42b92da 100644 --- a/apps/jingrow/frontend/src/shared/api/workspace.ts +++ b/apps/jingrow/frontend/src/shared/api/workspace.ts @@ -21,6 +21,7 @@ export interface WorkspaceSidebarResponse { pages: WorkspacePage[] has_access: boolean has_create_access: boolean + is_local?: boolean // True if running in jlocal environment } /** @@ -48,7 +49,8 @@ export const getWorkspaceSidebarItems = async (): Promise { const hasWorkspaceAccess = ref(false) const hasCreateWorkspaceAccess = ref(false) + // jlocal environment flag - true if running in jlocal, false if in SaaS + const isLocal = ref(false) + // Editable workspace order (for sidebar drag sorting in edit mode) const editableWorkspaceOrder = ref([]) @@ -186,6 +189,9 @@ export const useMenuStore = defineStore('menu', () => { // Store access flags hasWorkspaceAccess.value = response.has_access || false hasCreateWorkspaceAccess.value = response.has_create_access || false + + // Store jlocal flag + isLocal.value = response.is_local || false // 直接使用后端返回的菜单数据 items.value = workspaceMenuItems @@ -220,7 +226,12 @@ export const useMenuStore = defineStore('menu', () => { return items.value.filter(m => { if (m.hidden) return false - // 权限驱动规则:pagetype 类型的菜单仅在有 read 权限时显示 + // Filter "Local" menu in SaaS version (only show in jlocal) + if (!isLocal.value && m.type === 'workspace' && m.label === 'Local') { + return false + } + + // Permission driven rule: pagetype menu only visible with read permission if (m.type === 'pagetype' && m.pagetype) { const pagetypeName = m.pagetype if (!permissionStore.canRead(pagetypeName)) { @@ -228,7 +239,7 @@ export const useMenuStore = defineStore('menu', () => { } } - // workspace 类型暂时不做细粒度 pagetype 检查,由 WorkspacePage 内部再过滤链接 + // workspace type doesn't need fine-grained pagetype check, filtered by WorkspacePage internally return true }) }) @@ -240,6 +251,7 @@ export const useMenuStore = defineStore('menu', () => { workspaces, hasWorkspaceAccess, hasCreateWorkspaceAccess, + isLocal, editableWorkspaceOrder, addMenu, updateMenu, diff --git a/apps/jingrow/jingrow/desk/desktop.py b/apps/jingrow/jingrow/desk/desktop.py index 17769d5..ae17530 100644 --- a/apps/jingrow/jingrow/desk/desktop.py +++ b/apps/jingrow/jingrow/desk/desktop.py @@ -14,12 +14,15 @@ logger = logging.getLogger(__name__) @jingrow.whitelist() def get_workspace_sidebar_items(**kwargs): - """Get workspace sidebar items - Forward to SaaS""" + """Get workspace sidebar items - Forward to SaaS and add is_jlocal flag""" resp = saas_post('/api/action/jingrow.desk.desktop.get_workspace_sidebar_items', json=kwargs) if resp.status_code == 200: - return resp.json().get("message", {}) + result = resp.json().get("message", {}) + # Add is_local flag for jlocal frontend to filter menus + result['is_local'] = True + return result logger.error(f"[get_workspace_sidebar_items] SaaS error: {resp.status_code}") - return {} + return {'is_local': True} @jingrow.whitelist()