diff --git a/packages/vue-generator/src/plugins/parseSchemaPlugin.js b/packages/vue-generator/src/plugins/parseSchemaPlugin.js index c8fa7cf21..0217c6a4d 100644 --- a/packages/vue-generator/src/plugins/parseSchemaPlugin.js +++ b/packages/vue-generator/src/plugins/parseSchemaPlugin.js @@ -14,6 +14,7 @@ function parseSchema() { const { pageSchema } = schema const pagesMap = {} const resPageTree = [] + schema.componentsMap = [...schema.componentsMap, ...BUILTIN_COMPONENTS_MAP] for (const componentItem of pageSchema) { diff --git a/packages/vue-generator/src/utils/generateImportStatement.js b/packages/vue-generator/src/utils/generateImportStatement.js index 2357ed2f9..eb4c2aa0a 100644 --- a/packages/vue-generator/src/utils/generateImportStatement.js +++ b/packages/vue-generator/src/utils/generateImportStatement.js @@ -17,16 +17,31 @@ export function generateImportStatement(config) { export function generateImportByPkgName(config) { const { pkgName, imports } = config - + const seen = new Set() const importStatements = imports .filter(({ destructuring }) => destructuring) .map(({ componentName, exportName }) => { if (componentName === exportName) { - return componentName + if (!seen.has(componentName)) { + seen.add(componentName) + + return componentName + } + + return '' + } + + const alias = `${exportName} as ${componentName}` + + if (!seen.has(alias)) { + seen.add(alias) + + return alias } - return `${exportName} as ${componentName}` + return '' }) + .filter((item) => Boolean(item)) // 默认导出如果存在,应该只有一个 let defaultImports = imports.find(({ destructuring }) => !destructuring) 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..44a2c81e9 100644 --- a/packages/vue-generator/test/testcases/generator/mockData.js +++ b/packages/vue-generator/test/testcases/generator/mockData.js @@ -1875,6 +1875,178 @@ 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: '开发者' + }, + isHome: false + } } ], componentsMap: [