diff --git a/data/magic-api/api/后台/菜单管理/当前用户菜单.ms b/data/magic-api/api/后台/菜单管理/当前用户菜单.ms index 887838d..9dda019 100644 --- a/data/magic-api/api/后台/菜单管理/当前用户菜单.ms +++ b/data/magic-api/api/后台/菜单管理/当前用户菜单.ms @@ -5,7 +5,7 @@ "groupId" : "67b2ce258e24491194b74992958c74aa", "name" : "当前用户菜单", "createTime" : null, - "updateTime" : 1646400991044, + "updateTime" : 1646450734459, "lock" : "0", "method" : "POST", "path" : "/current/menus", @@ -551,7 +551,6 @@ var menus = db.select(""" sm.sort, sm.icon, sm.keep_alive, - sc.code, sc.name component_name from sys_menu sm left join sys_component sc on sm.component_id = sc.id where 1=1 diff --git a/magic-boot-ui/src/main.js b/magic-boot-ui/src/main.js index 1c811fc..cff6b0b 100644 --- a/magic-boot-ui/src/main.js +++ b/magic-boot-ui/src/main.js @@ -15,6 +15,7 @@ import App from './App.vue' import router from './scripts/router' import components from '@/components/index' import globalProperties from './scripts/globalProperties' +import dynamicComponent from './scripts/dynamicComponent' import hasPermission from './scripts/hasPermission' import '@/permission' @@ -28,6 +29,7 @@ router.beforeEach((to, from) => { return true }) app.use(globalProperties) +app.use(dynamicComponent) app.use(hasPermission) app.use(components) app.use(ElementPlus, { diff --git a/magic-boot-ui/src/scripts/dynamicComponent.js b/magic-boot-ui/src/scripts/dynamicComponent.js new file mode 100644 index 0000000..d80f20f --- /dev/null +++ b/magic-boot-ui/src/scripts/dynamicComponent.js @@ -0,0 +1,36 @@ +import { babelParse } from '@vue/compiler-sfc' +import { compileFile } from '@/compiler/sfc-compiler.js' + +function appComponent(app, item){ + var compiled = {} + compileFile('TestCode.vue', item.code, compiled) + var code = compiled.js + var ast = babelParse(code, { + sourceType: 'module' + }) + var replaceCode = (node, subCode) => code.substring(0, node.start) + subCode + code.substring(node.end); + for(var i = ast.program.body.length - 1; i>=0; i--){ + var node = ast.program.body[i] + if(node.type === 'ImportDeclaration'){ + code = replaceCode(node, node.specifiers.map(it => `const ${it.local?.name || it.imported?.name || '*'} = ___magic__import__('${node.source.value}', '${it.imported?.name || '*'}');`).join('\r\n')); + } else if (node.type === 'ExportDefaultDeclaration'){ + code = replaceCode(node, `return ${node.declaration.name}`) + } + } + code = `(function(){ + ${code} + })()` + var componentStyle = document.createElement("style"); + componentStyle.innerHTML = compiled.css + document.head.appendChild(componentStyle); + app.component(item.name, eval(code)) +} + +const install = (app) => { + app.config.globalProperties.$get('/component/list', { size: 999999 }).then((res) => { + res.data.list.forEach(it => { + appComponent(app, it) + }) + }) +} +export default install diff --git a/magic-boot-ui/src/scripts/globalProperties.js b/magic-boot-ui/src/scripts/globalProperties.js index ef6cff1..461e1dc 100644 --- a/magic-boot-ui/src/scripts/globalProperties.js +++ b/magic-boot-ui/src/scripts/globalProperties.js @@ -27,4 +27,4 @@ const install = (app) => { } app.use(VueUeditorWrap) } -export default install \ No newline at end of file +export default install diff --git a/magic-boot-ui/src/scripts/routerPermission.js b/magic-boot-ui/src/scripts/routerPermission.js index 9cec30b..725da5e 100644 --- a/magic-boot-ui/src/scripts/routerPermission.js +++ b/magic-boot-ui/src/scripts/routerPermission.js @@ -7,11 +7,8 @@ export const filterAsyncRouter = (routers, level) => { const accessedRouters = routers.filter(router => { if (router.isShow === 1) { if (router.componentName) { - router.component = loadView(`/common/parse-component`) - router.props = { - name: router.componentName, - code: router.code - } + router.component = loadView(`/common/show-component`) + router.props = { name: router.componentName } } else if (router.component) { const component = router.component if (component === 'Layout') { @@ -52,4 +49,4 @@ export function generateRoutes(){ resolve(asyncRouter) }) }) -} \ No newline at end of file +} diff --git a/magic-boot-ui/src/views/common/parse-component.vue b/magic-boot-ui/src/views/common/parse-component.vue deleted file mode 100644 index 80b2504..0000000 --- a/magic-boot-ui/src/views/common/parse-component.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - \ No newline at end of file diff --git a/magic-boot-ui/src/views/common/show-component.vue b/magic-boot-ui/src/views/common/show-component.vue new file mode 100644 index 0000000..fe54048 --- /dev/null +++ b/magic-boot-ui/src/views/common/show-component.vue @@ -0,0 +1,12 @@ + + + diff --git a/magic-boot-ui/src/views/home.vue b/magic-boot-ui/src/views/home.vue index 6992963..a0def82 100644 --- a/magic-boot-ui/src/views/home.vue +++ b/magic-boot-ui/src/views/home.vue @@ -1,41 +1,8 @@