搜索

📄 文章 📚 合集
热门搜索
🐘 PHP ⚡ Laravel 🎨 Vue.js ⚛️ React 📦 Yii 📘 JavaScript 🗄️ MySQL 🐳 Docker
返回合集

[板块3:Vue 3 + Element Plus 后台(含认证+核心功能)] - 15- 添加页面管理和站点配置占位

代码示例
# 页面管理与站点配置占位

## 1. 创建占位页面

### 1.1 创建 Pages.vue

**文件路径**:`resources\js\admin\views\Pages.vue`

**完整代码**:

```vue
<template>
    <el-card>
        <h3>页面管理</h3>
        <p>页面管理功能开发中...</p>
    </el-card>
</template>
```

### 1.2 创建 SiteSettings.vue

**文件路径**:`resources\js\admin\views\SiteSettings.vue`

**完整代码**:

```vue
<template>
    <el-card>
        <h3>站点配置</h3>
        <p>站点配置功能开发中...</p>
    </el-card>
</template>
```

### 1.3 说明

这两个文件作为占位页面,确保点击菜单时不报错。具体功能将在后续阶段开发。

---

## 2. 修改路由配置

### 2.1 文件路径

`resources\js\admin\router\index.ts`

### 2.2 问题发现

原有的路由配置只有 `dashboard` 子路由,缺少 `pages` 和 `site`。

**原有代码**:

```typescript
children: [
    {
        path: '',
        name: 'dashboard',
        component: () => import('../views/Dashboard.vue'),
    },
],
```

### 2.3 完整代码

```typescript
import { createRouter, createWebHistory } from 'vue-router';
import { useAuthStore } from '../stores/auth';

const routes = [
    {
        path: '/admin/login',
        name: 'login',
        component: () => import('../views/Login.vue'),
        meta: { guest: true },
    },
    {
        path: '/admin',
        component: () => import('../layouts/MainLayout.vue'),
        meta: { requiresAuth: true },
        children: [
            {
                path: '',
                name: 'dashboard',
                component: () => import('../views/Dashboard.vue'),
            },
            {
                path: 'pages',
                name: 'pages',
                component: () => import('../views/Pages.vue'),
            },
            {
                path: 'site',
                name: 'site-settings',
                component: () => import('../views/SiteSettings.vue'),
            },
        ],
    },
];

const router = createRouter({
    history: createWebHistory(),
    routes,
});

router.beforeEach((to, from, next) => {
    const authStore = useAuthStore();
    const isAuthenticated = authStore.isAuthenticated;

    if (to.meta.requiresAuth && !isAuthenticated) {
        next('/admin/login');
    } else if (to.meta.guest && isAuthenticated) {
        next('/admin');
    } else {
        next();
    }
});

export default router;
```

### 2.4 代码说明

| 代码 | 作用 |
|------|------|
| `path: 'pages'` | 匹配 `/admin/pages` 路径 |
| `component: () => import('../views/Pages.vue')` | 动态导入页面管理组件 |
| `path: 'site'` | 匹配 `/admin/site` 路径 |
| `component: () => import('../views/SiteSettings.vue')` | 动态导入站点配置组件 |

---

## 3. 编译验证

### 3.1 执行命令

```bash
npm run build
```

### 3.2 预期结果

编译成功,无报错。

---

## 4. 访问测试

### 4.1 登录后台

浏览器打开:`http://engine-api.test/admin/login`

输入账号密码登录。

### 4.2 测试页面管理

点击左侧菜单「页面管理」

**预期结果**:显示「页面管理功能开发中...」

### 4.3 测试站点配置

点击左侧菜单「站点配置」

**预期结果**:显示「站点配置功能开发中...」

---

## 5. 遇到的问题及解决

### 5.1 问题:点击菜单页面空白

| 项目 | 内容 |
|------|------|
| **现象** | 点击「页面管理」或「站点配置」菜单,右侧内容区空白 |
| **原因** | 路由配置中缺少 `pages` 和 `site` 子路由 |
| **解决方案** | 在 `router/index.ts` 的 `children` 数组中添加 `pages` 和 `site` 路由 |

### 5.2 问题:API 请求 404

| 项目 | 内容 |
|------|------|
| **现象** | 控制台报错 `GET http://engine-api.test/api/admin/pages 404` |
| **原因** | `PageController` 的 `index` 方法尚未实现 |
| **说明** | 这是后续阶段需要开发的功能,不影响当前阶段验收 |

---

## 6. 验证结果

| 验证项 | 预期结果 | 实际结果 |
|--------|---------|---------|
| 编译 | 无报错 | ✅ 通过 |
| 点击「页面管理」菜单 | 显示占位内容 | ✅ 通过 |
| 点击「站点配置」菜单 | 显示占位内容 | ✅ 通过 |
| 页面切换 | 正常切换,无报错 | ✅ 通过 |

---

🧸 adorable code

专注 PHP、JavaScript、Laravel、Vue.js、React、Yii 全栈开发。记录技术探索过程中的灵感与经验,分享工程实践洞见。

hello@adorablecode.com