mirror of https://github.com/halo-dev/halo-admin
feat: bundle core modules
parent
2538959339
commit
d8c14531e0
|
@ -15,7 +15,7 @@ export interface Plugin {
|
|||
name: string;
|
||||
|
||||
/**
|
||||
* This components will be registered when plugin is activated.
|
||||
* These components will be registered when plugin is activated.
|
||||
*/
|
||||
components?: Component[];
|
||||
|
||||
|
|
53
src/main.ts
53
src/main.ts
|
@ -8,18 +8,8 @@ import "./setup/setupStyles";
|
|||
import { setupComponents } from "./setup/setupComponents";
|
||||
import { registerMenu } from "@/router/menus.config";
|
||||
|
||||
// modules
|
||||
import dashboardModule from "./modules/dashboard/module";
|
||||
import postModule from "./modules/contents/posts/module";
|
||||
import sheetModule from "./modules/contents/sheets/module";
|
||||
import commentModule from "./modules/contents/comments/module";
|
||||
import attachmentModule from "./modules/contents/attachments/module";
|
||||
import themeModule from "./modules/interface/themes/module";
|
||||
import menuModule from "./modules/interface/menus/module";
|
||||
import pluginModule from "./modules/system/plugins/module";
|
||||
import userModule from "./modules/system/users/module";
|
||||
import roleModule from "./modules/system/roles/module";
|
||||
import settingModule from "./modules/system/settings/module";
|
||||
// core modules
|
||||
import { coreModules } from "./modules";
|
||||
|
||||
const app = createApp(App);
|
||||
|
||||
|
@ -27,20 +17,35 @@ setupComponents(app);
|
|||
|
||||
app.use(createPinia());
|
||||
|
||||
async function registerModule(pluginModule: Plugin) {
|
||||
function registerModule(pluginModule: Plugin) {
|
||||
if (pluginModule.components) {
|
||||
if (!Array.isArray(pluginModule.components)) {
|
||||
console.error(`${pluginModule.name}: Plugin components must be an array`);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const component of pluginModule.components) {
|
||||
component.name && app.component(component.name, component);
|
||||
}
|
||||
}
|
||||
|
||||
if (pluginModule.routes) {
|
||||
if (!Array.isArray(pluginModule.routes)) {
|
||||
console.error(`${pluginModule.name}: Plugin routes must be an array`);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const route of pluginModule.routes) {
|
||||
router.addRoute(route);
|
||||
}
|
||||
}
|
||||
|
||||
if (pluginModule.menus) {
|
||||
if (!Array.isArray(pluginModule.menus)) {
|
||||
console.error(`${pluginModule.name}: Plugin menus must be an array`);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const group of pluginModule.menus) {
|
||||
for (const menu of group.items) {
|
||||
registerMenu(group.name, menu);
|
||||
|
@ -50,19 +55,7 @@ async function registerModule(pluginModule: Plugin) {
|
|||
}
|
||||
|
||||
function loadCoreModules() {
|
||||
Array.from<Plugin>([
|
||||
dashboardModule,
|
||||
postModule,
|
||||
sheetModule,
|
||||
commentModule,
|
||||
attachmentModule,
|
||||
themeModule,
|
||||
menuModule,
|
||||
pluginModule,
|
||||
userModule,
|
||||
roleModule,
|
||||
settingModule,
|
||||
]).forEach(registerModule);
|
||||
coreModules.forEach(registerModule);
|
||||
}
|
||||
|
||||
function loadPluginModules() {
|
||||
|
@ -72,8 +65,12 @@ function loadPluginModules() {
|
|||
initApp();
|
||||
|
||||
async function initApp() {
|
||||
loadCoreModules();
|
||||
loadPluginModules();
|
||||
try {
|
||||
loadCoreModules();
|
||||
loadPluginModules();
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
app.use(router);
|
||||
app.mount("#app");
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
import dashboardModule from "./dashboard/module";
|
||||
import postModule from "./contents/posts/module";
|
||||
import sheetModule from "./contents/sheets/module";
|
||||
import commentModule from "./contents/comments/module";
|
||||
import attachmentModule from "./contents/attachments/module";
|
||||
import themeModule from "./interface/themes/module";
|
||||
import menuModule from "./interface/menus/module";
|
||||
import pluginModule from "./system/plugins/module";
|
||||
import userModule from "./system/users/module";
|
||||
import roleModule from "./system/roles/module";
|
||||
import settingModule from "./system/settings/module";
|
||||
|
||||
const coreModules = [
|
||||
dashboardModule,
|
||||
postModule,
|
||||
sheetModule,
|
||||
commentModule,
|
||||
attachmentModule,
|
||||
themeModule,
|
||||
menuModule,
|
||||
pluginModule,
|
||||
userModule,
|
||||
roleModule,
|
||||
settingModule,
|
||||
];
|
||||
|
||||
export { coreModules };
|
|
@ -13,6 +13,7 @@ import { useRoute, useRouter } from "vue-router";
|
|||
import { roles } from "@/modules/system/roles/roles-mock";
|
||||
import { ref } from "vue";
|
||||
import { users } from "@/modules/system/users/users-mock";
|
||||
import { Starport } from "vue-starport";
|
||||
|
||||
const route = useRoute();
|
||||
|
||||
|
@ -127,15 +128,21 @@ const handleRouteToUser = (username: string) => {
|
|||
<div class="flex items-center px-4 py-4">
|
||||
<div class="flex min-w-0 flex-1 items-center">
|
||||
<div class="flex-shrink-0">
|
||||
<div
|
||||
class="h-12 w-12 overflow-hidden rounded border bg-white hover:shadow-sm"
|
||||
<Starport
|
||||
:duration="400"
|
||||
:port="`user-profile-${user.name}`"
|
||||
class="h-12 w-12"
|
||||
>
|
||||
<img
|
||||
:alt="user.name"
|
||||
:src="user.avatar"
|
||||
class="h-full w-full"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="overflow-hidden rounded border bg-white hover:shadow-sm"
|
||||
>
|
||||
<img
|
||||
:alt="user.name"
|
||||
:src="user.avatar"
|
||||
class="h-full w-full"
|
||||
/>
|
||||
</div>
|
||||
</Starport>
|
||||
</div>
|
||||
<div
|
||||
class="min-w-0 flex-1 px-4 md:grid md:grid-cols-2 md:gap-4"
|
||||
|
|
|
@ -29,7 +29,6 @@ export default definePlugin({
|
|||
{
|
||||
path: ":username",
|
||||
component: UserProfileLayout,
|
||||
alias: ["profile"],
|
||||
children: [
|
||||
{
|
||||
path: "detail",
|
||||
|
|
Loading…
Reference in New Issue