diff --git a/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js b/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js index 23d2dcee3..388f847a0 100644 --- a/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js +++ b/packages/vue-generator/src/generator/vue/sfc/genSetupSFC.js @@ -270,7 +270,18 @@ export const genSFCWithDefaultPlugin = (schema, componentsMap, config = {}, next } // 兼容单独调用的场景,单独调用时,这里会默认加上 builtInComponents - const compsMapWithBuiltIn = [...componentsMap, ...BUILTIN_COMPONENTS_MAP] + const compsMapWithBuiltIn = [...componentsMap] + + for (const builtInComp of BUILTIN_COMPONENTS_MAP) { + if ( + !compsMapWithBuiltIn.find( + ({ componentName, package: packageName }) => + componentName === builtInComp.componentName && packageName === builtInComp.package + ) + ) { + compsMapWithBuiltIn.push(builtInComp) + } + } return generateSFCFile(schema, compsMapWithBuiltIn, newConfig, nextPage) } diff --git a/packages/vue-generator/src/plugins/parseSchemaPlugin.js b/packages/vue-generator/src/plugins/parseSchemaPlugin.js index c8fa7cf21..9cc7128ba 100644 --- a/packages/vue-generator/src/plugins/parseSchemaPlugin.js +++ b/packages/vue-generator/src/plugins/parseSchemaPlugin.js @@ -14,7 +14,17 @@ function parseSchema() { const { pageSchema } = schema const pagesMap = {} const resPageTree = [] - schema.componentsMap = [...schema.componentsMap, ...BUILTIN_COMPONENTS_MAP] + + for (const builtInComp of BUILTIN_COMPONENTS_MAP) { + if ( + !schema.componentsMap.find( + ({ componentName, package: packageName }) => + componentName === builtInComp.componentName && packageName === builtInComp.package + ) + ) { + schema.componentsMap.push(builtInComp) + } + } for (const componentItem of pageSchema) { pagesMap[componentItem.meta.id] = componentItem diff --git a/packages/vue-generator/test/testcases/generator/expected/appdemo01/package.json b/packages/vue-generator/test/testcases/generator/expected/appdemo01/package.json index 4e9675d38..a404389d7 100644 --- a/packages/vue-generator/test/testcases/generator/expected/appdemo01/package.json +++ b/packages/vue-generator/test/testcases/generator/expected/appdemo01/package.json @@ -11,14 +11,15 @@ "module": "dist/index.js", "dependencies": { "@opentiny/tiny-engine-i18n-host": "^1.0.0", - "@opentiny/vue": "latest", - "@opentiny/vue-icon": "latest", + "@opentiny/vue": "0.1.16", + "@opentiny/vue-icon": "0.1.16", "axios": "latest", "axios-mock-adapter": "^1.19.0", "vue": "^3.3.9", "vue-i18n": "^9.2.0-beta.3", "vue-router": "^4.2.5", - "pinia": "^2.1.7" + "pinia": "^2.1.7", + "@opentiny/tiny-engine-builtin-component": "^2.0.0" }, "devDependencies": { "@vitejs/plugin-vue": "^5.1.2", diff --git a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/router/index.js b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/router/index.js index 7cd5ff8e8..a28912f42 100644 --- a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/router/index.js +++ b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/router/index.js @@ -1,11 +1,26 @@ import { createRouter, createWebHashHistory } from 'vue-router' const routes = [ - { path: '/', redirect: '/demopage' }, - { path: '/demopage', component: () => import('@/views/DemoPage.vue') }, - { path: '/createVm', component: () => import('@/views/createVm.vue') } + { + name: '5bhD7p5FUsUOTFRN', + path: 'demopage', + component: () => import('@/views/DemoPage.vue'), + children: [] + }, + { + name: 'NTJ4MjvqoVj8OVsc', + path: 'createVm', + component: () => import('@/views/createVm.vue'), + children: [] + }, + { + name: '1737797330916', + path: 'testCanvasRowCol', + component: () => import('@/views/testCanvasRowCol.vue'), + children: [] + } ] export default createRouter({ history: createWebHashHistory(), - routes + routes: [{ path: '/', children: routes }] }) diff --git a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/views/testCanvasRowCol.vue b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/views/testCanvasRowCol.vue new file mode 100644 index 000000000..6ce6b8b7f --- /dev/null +++ b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/views/testCanvasRowCol.vue @@ -0,0 +1,51 @@ + + + + diff --git a/packages/vue-generator/test/testcases/generator/mockData.js b/packages/vue-generator/test/testcases/generator/mockData.js index 71bdd356f..046746aec 100644 --- a/packages/vue-generator/test/testcases/generator/mockData.js +++ b/packages/vue-generator/test/testcases/generator/mockData.js @@ -1875,6 +1875,182 @@ export const appSchemaDemo01 = { isHome: false, _id: 'NTJ4MjvqoVj8OVsc' } + }, + { + state: { + dataDisk: [1, 2, 3] + }, + methods: {}, + componentName: 'Page', + css: 'body {\r\n background-color:#eef0f5 ;\r\n margin-bottom: 80px;\r\n}', + props: {}, + children: [ + { + componentName: 'CanvasRowColContainer', + props: { + rowGap: '20px' + }, + children: [ + { + componentName: 'CanvasRow', + props: { + rowGap: '20px', + colGap: '20px' + }, + children: [ + { + componentName: 'CanvasCol', + props: { + rowGap: '20px', + colGap: '20px', + grow: true, + shrink: true, + widthType: 'auto' + }, + id: '4514b344' + }, + { + componentName: 'CanvasCol', + props: { + rowGap: '20px', + colGap: '20px', + grow: true, + shrink: true, + widthType: 'auto' + }, + children: [], + id: '3664a254' + } + ], + id: '63553246' + }, + { + componentName: 'CanvasRow', + props: { + rowGap: '20px', + colGap: '20px' + }, + children: [ + { + componentName: 'CanvasCol', + props: { + rowGap: '20px', + colGap: '20px', + grow: true, + shrink: true, + widthType: 'auto' + }, + id: '2c13444f', + children: [ + { + componentName: 'CanvasRow', + props: { + rowGap: '20px', + colGap: '20px' + }, + children: [ + { + componentName: 'CanvasCol', + props: { + rowGap: '20px', + colGap: '20px', + grow: true, + shrink: true, + widthType: 'auto' + }, + children: [], + id: '24256327' + } + ], + id: '56453426' + }, + { + componentName: 'CanvasRow', + props: { + rowGap: '20px', + colGap: '20px' + }, + children: [ + { + componentName: 'CanvasCol', + props: { + rowGap: '20px', + colGap: '20px', + grow: true, + shrink: true, + widthType: 'auto' + }, + id: '5451f224' + } + ], + id: '26364626' + }, + { + componentName: 'CanvasRow', + props: { + rowGap: '20px', + colGap: '20px' + }, + children: [ + { + componentName: 'CanvasCol', + props: { + rowGap: '20px', + colGap: '20px', + grow: true, + shrink: true, + widthType: 'auto' + }, + children: [], + id: '26232436' + } + ], + id: '52555445' + } + ] + }, + { + componentName: 'CanvasCol', + props: { + rowGap: '20px', + colGap: '20px', + grow: true, + shrink: true, + widthType: 'auto' + }, + children: [], + id: '53553563' + } + ], + id: '53b5fe13' + } + ], + id: '25452c43' + } + ], + fileName: 'testCanvasRowCol', + meta: { + name: 'testCanvasRowCol', + id: 1737797330916, + app: '918', + router: 'testCanvasRowCol', + tenant: 1, + isBody: false, + parentId: '0', + group: 'staticPages', + depth: 0, + isPage: true, + isDefault: false, + occupier: { + id: 86, + username: '开发者', + email: 'developer@lowcode.com', + resetPasswordToken: 'developer', + confirmationToken: 'dfb2c162-351f-4f44-ad5f-8998', + is_admin: true + }, + isHome: false + } } ], componentsMap: [