From 419beb76b2272d883193b69027cd71e79318eb6f Mon Sep 17 00:00:00 2001 From: jingrow Date: Sat, 25 Oct 2025 21:17:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84pagetype=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/pagetype/file/form/controls/HTML.vue | 188 ------------------ .../src/core/registry/controlOverride.ts | 26 +-- .../src/core/registry/pagetypeOverride.ts | 27 +-- .../pagetype/file/file_toolbar.vue | 0 .../local_ai_agent/local_ai_agent_toolbar.vue | 0 .../local_ai_node/local_ai_node_toolbar.vue | 0 .../pagetype/package/package_toolbar.vue | 0 7 files changed, 24 insertions(+), 217 deletions(-) delete mode 100644 apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/file/form/controls/HTML.vue rename apps/jingrow/frontend/src/{apps/jingrow/jingrow/core => views}/pagetype/file/file_toolbar.vue (100%) rename apps/jingrow/frontend/src/{apps/jingrow/jingrow/ai => views}/pagetype/local_ai_agent/local_ai_agent_toolbar.vue (100%) rename apps/jingrow/frontend/src/{apps/jingrow/jingrow/ai => views}/pagetype/local_ai_node/local_ai_node_toolbar.vue (100%) rename apps/jingrow/frontend/src/{apps/jingrow/jingrow/core => views}/pagetype/package/package_toolbar.vue (100%) diff --git a/apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/file/form/controls/HTML.vue b/apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/file/form/controls/HTML.vue deleted file mode 100644 index 330a5d3..0000000 --- a/apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/file/form/controls/HTML.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - - - diff --git a/apps/jingrow/frontend/src/core/registry/controlOverride.ts b/apps/jingrow/frontend/src/core/registry/controlOverride.ts index 9f6a127..83a8080 100644 --- a/apps/jingrow/frontend/src/core/registry/controlOverride.ts +++ b/apps/jingrow/frontend/src/core/registry/controlOverride.ts @@ -1,11 +1,11 @@ // 字段控件覆盖机制 -// 约定:/src/apps///pagetype//form/controls/.vue +// 约定:/src/views/pagetype//form/controls/.vue type AsyncComponentLoader = () => Promise // 扫描所有可能的控件覆盖组件 const allControlOverrides: Record = import.meta.glob( - '/src/apps/**/pagetype/**/form/controls/**.vue' + '/src/views/pagetype/**/form/controls/**.vue' ) /** @@ -20,31 +20,23 @@ export async function resolveControlOverride(entity: string, fieldtype: string): const entityUnderscore = entity.toLowerCase().replace(/-/g, '_') const fieldtypeNormalized = fieldtype.replace(/\s+/g, '') - // 构建目标路径模式 - const targetPattern = `/src/apps/**/pagetype/${entityUnderscore}/form/controls/${fieldtypeNormalized}.vue` - // 查找匹配的控件覆盖 const candidates = Object.keys(allControlOverrides).filter((path) => { const segments = path.split('/').filter(Boolean) const len = segments.length - if (len < 7) return false // 至少需要 7 段路径 + if (len < 6) return false // 至少需要 6 段路径:views/pagetype/{entity}/form/controls/{fieldtype}.vue - // 检查路径结构:.../pagetype/{entity}/form/controls/{fieldtype}.vue - const pagetypeIndex = segments.findIndex(s => s === 'pagetype') - if (pagetypeIndex === -1 || pagetypeIndex >= len - 4) return false - - const entityInPath = segments[pagetypeIndex + 1] - const formInPath = segments[pagetypeIndex + 2] - const controlsInPath = segments[pagetypeIndex + 3] + // 检查路径结构:views/pagetype/{entity}/form/controls/{fieldtype}.vue const fileName = segments[len - 1] - const fieldtypeInPath = fileName.replace(/\.vue$/i, '') return ( - entityInPath === entityUnderscore && - formInPath === 'form' && - controlsInPath === 'controls' && + segments[0] === 'views' && + segments[1] === 'pagetype' && + segments[2] === entityUnderscore && + segments[3] === 'form' && + segments[4] === 'controls' && fieldtypeInPath === fieldtypeNormalized ) }) diff --git a/apps/jingrow/frontend/src/core/registry/pagetypeOverride.ts b/apps/jingrow/frontend/src/core/registry/pagetypeOverride.ts index b983ff2..a1ff10a 100644 --- a/apps/jingrow/frontend/src/core/registry/pagetypeOverride.ts +++ b/apps/jingrow/frontend/src/core/registry/pagetypeOverride.ts @@ -1,12 +1,12 @@ // 基于约定路径自动解析 pagetype 详情覆盖组件 -// 约定:/src/apps///pagetype//.vue +// 约定:/src/views/pagetype//.vue type AsyncComponentLoader = () => Promise // 扫描所有可能的覆盖组件(仅限 .vue) // 使用 eager: false 延迟加载,生产环境下可按需分包 const allPagetypeViews: Record = import.meta.glob( - '/src/apps/**/pagetype/**/**.vue' + '/src/views/pagetype/**/**.vue' ) function getPathSegments(path: string): string[] { @@ -24,20 +24,21 @@ export async function resolvePagetypeDetailOverride(pagetypeSlug: string): Promi const targetHyphen = pagetypeSlug.toLowerCase() const targetUnderscore = targetHyphen.replace(/-/g, '_') - // 匹配末尾形如 .../pagetype//.vue 的文件 + // 匹配形如 views/pagetype//.vue 的文件 const candidates = Object.keys(allPagetypeViews).filter((file) => { const segs = getPathSegments(file) const len = segs.length if (len < 5) return false - // 末两段应为 .vue 与 + // 路径应为 views/pagetype//.vue const fileName = segs[len - 1] const folderName = segs[len - 2] - const parentFolder = segs.findIndex((s) => s === 'pagetype') - if (parentFolder === -1) return false const baseName = fileName.replace(/\.vue$/i, '') - // 需要同时满足:位于 pagetype 下,且末两级目录名与目标一致(支持下划线形式) + // 需要同时满足:位于 views/pagetype 下,且末两级目录名与目标一致(支持下划线形式) return ( - (folderName === targetUnderscore && baseName === targetUnderscore) + segs[1] === 'views' && + segs[2] === 'pagetype' && + folderName === targetUnderscore && + baseName === targetUnderscore ) }) @@ -61,7 +62,7 @@ export async function resolvePagetypeDetailOverride(pagetypeSlug: string): Promi /** * 解析并返回指定 pagetype 的工具栏覆盖组件 - * 约定文件名:/src/apps/任意路径/pagetype/名称/名称_toolbar.vue + * 约定文件名:/src/views/pagetype//_toolbar.vue */ export async function resolvePagetypeToolbarOverride(pagetypeSlug: string): Promise { if (!pagetypeSlug) return null @@ -72,13 +73,15 @@ export async function resolvePagetypeToolbarOverride(pagetypeSlug: string): Prom const segs = getPathSegments(file) const len = segs.length if (len < 5) return false + // 路径应为 views/pagetype//_toolbar.vue const fileName = segs[len - 1] const folderName = segs[len - 2] - const parentFolder = segs.findIndex((s) => s === 'pagetype') - if (parentFolder === -1) return false const baseName = fileName.replace(/\.vue$/i, '') return ( - folderName === targetUnderscore && baseName === `${targetUnderscore}_toolbar` + segs[1] === 'views' && + segs[2] === 'pagetype' && + folderName === targetUnderscore && + baseName === `${targetUnderscore}_toolbar` ) }) diff --git a/apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/file/file_toolbar.vue b/apps/jingrow/frontend/src/views/pagetype/file/file_toolbar.vue similarity index 100% rename from apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/file/file_toolbar.vue rename to apps/jingrow/frontend/src/views/pagetype/file/file_toolbar.vue diff --git a/apps/jingrow/frontend/src/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/local_ai_agent_toolbar.vue b/apps/jingrow/frontend/src/views/pagetype/local_ai_agent/local_ai_agent_toolbar.vue similarity index 100% rename from apps/jingrow/frontend/src/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/local_ai_agent_toolbar.vue rename to apps/jingrow/frontend/src/views/pagetype/local_ai_agent/local_ai_agent_toolbar.vue diff --git a/apps/jingrow/frontend/src/apps/jingrow/jingrow/ai/pagetype/local_ai_node/local_ai_node_toolbar.vue b/apps/jingrow/frontend/src/views/pagetype/local_ai_node/local_ai_node_toolbar.vue similarity index 100% rename from apps/jingrow/frontend/src/apps/jingrow/jingrow/ai/pagetype/local_ai_node/local_ai_node_toolbar.vue rename to apps/jingrow/frontend/src/views/pagetype/local_ai_node/local_ai_node_toolbar.vue diff --git a/apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/package/package_toolbar.vue b/apps/jingrow/frontend/src/views/pagetype/package/package_toolbar.vue similarity index 100% rename from apps/jingrow/frontend/src/apps/jingrow/jingrow/core/pagetype/package/package_toolbar.vue rename to apps/jingrow/frontend/src/views/pagetype/package/package_toolbar.vue