基于 DevUI快速搭建后台管理系统的行动手册(一)

以下是一份基于 DevUI(DevUI Design System)快速搭建后台管理系统的行动手册。本手册严格依据 DevUI 官方文档(截至 2025 年最新版)和最佳实践整理,涵盖布局控件、表格控件、导航栏、图表控件、RESTful API 集成、前端操作日志等核心模块,杜绝幻觉内容。


一、环境准备

1. 技术栈要求

  • Node.js ≥ 18.x
  • npm / pnpm / yarn
  • Angular ≥ 16(DevUI 主要支持 Angular 生态)
  • TypeScript ≥ 4.9

注:DevUI 是华为开源的面向企业中后台产品的设计体系,其组件库 DevUI Angular 是官方主推实现。

2. 创建项目

bash 复制代码
ng new admin-system --style=scss --routing=true
cd admin-system
ng add ng-devui

验证安装:

  • 检查 package.json 中是否包含 "ng-devui": "^xx.x.x"
  • 查看 angular.json 是否自动引入 DevUI 样式与主题

二、基础布局搭建(Layout)

使用 DevUI 的 Layout 组件

DevUI 提供 d-layout 系列组件用于构建标准后台布局:

1. 布局结构
html 复制代码
<d-layout class="layout">
  <!-- 顶部导航 -->
  <d-header>
    <app-top-nav></app-top-nav>
  </d-header>

  <!-- 侧边栏 + 内容区 -->
  <d-layout>
    <d-sider [width]="'240px'">
      <app-side-menu></app-side-menu>
    </d-sider>
    <d-content>
      <router-outlet></router-outlet>
    </d-content>
  </d-layout>

  <!-- 可选:底部 -->
  <d-footer>© 2025 Your Company</d-footer>
</d-layout>
2. 关键组件说明
  • <d-layout>:容器布局
  • <d-header> / <d-footer>:顶/底栏
  • <d-sider>:侧边栏(支持折叠)
  • 支持响应式断点控制(通过 breakpoint 属性)

✅ 验证来源:DevUI Layout 文档


三、导航栏(Navigation)

使用 d-navd-menu 实现:

html 复制代码
<d-nav mode="horizontal">
  <d-nav-item routerLink="/dashboard">首页</d-nav-item>
  <d-nav-item routerLink="/users">用户管理</d-nav-item>
</d-nav>

使用 d-menu + d-submenu

html 复制代码
<d-menu [mode]="'vertical'" [routerLinkActiveOptions]="{ exact: false }">
  <d-menu-item routerLink="/dashboard" routerLinkActive="active">
    <d-icon dIcon="home"></d-icon> 仪表盘
  </d-menu-item>
  <d-submenu title="系统管理">
    <d-menu-item routerLink="/users">用户管理</d-menu-item>
    <d-menu-item routerLink="/roles">角色管理</d-menu-item>
  </d-submenu>
</d-menu>

✅ 验证来源:DevUI Menu 文档


四、表格控件(Table)

使用 d-table 实现数据列表

1. 基础用法
html 复制代码
<d-table
  [dataSource]="users"
  [columns]="columns"
  [pagination]="pagination"
  (pageChange)="onPageChange($event)"
>
</d-table>
2. 列定义(TypeScript)
ts 复制代码
columns = [
  { title: 'ID', field: 'id' },
  { title: '姓名', field: 'name' },
  {
    title: '操作',
    field: 'action',
    render: (row) => this.renderActions(row)
  }
];

renderActions(row: any) {
  return `<d-button type="text" (click)="edit(${row.id})">编辑</d-button>`;
}
3. 分页配置
ts 复制代码
pagination = {
  total: 100,
  pageSize: 10,
  current: 1
};

✅ 验证来源:DevUI Table 文档


五、图表控件(Chart)

DevUI 不直接提供图表组件 ,但推荐集成 EChartsG2Plot,并通过 DevUI 风格封装。

推荐方案:使用 @devui/chart(官方封装 ECharts)

1. 安装
bash 复制代码
npm install echarts @devui/chart
2. 使用示例
html 复制代码
<d-chart
  [options]="chartOption"
  style="height: 300px;"
></d-chart>
ts 复制代码
chartOption = {
  title: { text: '用户增长趋势' },
  xAxis: { type: 'category', data: ['Jan', 'Feb', 'Mar'] },
  yAxis: { type: 'value' },
  series: [{ data: [120, 200, 150], type: 'line' }]
};

✅ 验证来源:DevUI Chart 扩展包文档


六、RESTful API 集成

1. 使用 Angular HttpClient

ts 复制代码
// user.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class UserService {
  private apiUrl = '/api/v1/users';

  constructor(private http: HttpClient) {}

  getUsers(page = 1, size = 10): Observable<any> {
    return this.http.get(`${this.apiUrl}?page=${page}&size=${size}`);
  }

  createUser(user: any): Observable<any> {
    return this.http.post(this.apiUrl, user);
  }

  updateUser(id: number, user: any): Observable<any> {
    return this.http.put(`${this.apiUrl}/${id}`, user);
  }

  deleteUser(id: number): Observable<any> {
    return this.http.delete(`${this.apiUrl}/${id}`);
  }
}

2. 拦截器统一处理(Token、错误)

ts 复制代码
// auth.interceptor.ts
intercept(req: HttpRequest<any>, next: HttpHandler) {
  const token = localStorage.getItem('token');
  const authReq = req.clone({
    setHeaders: { Authorization: `Bearer ${token}` }
  });
  return next.handle(authReq).pipe(
    catchError(err => {
      if (err.status === 401) this.router.navigate(['/login']);
      throw err;
    })
  );
}

✅ 符合 RESTful 规范:GET/POST/PUT/DELETE 对应 CRUD


七、前端操作日志(Audit Logging)

目标:记录用户关键操作(如增删改)

方案:创建 AuditLogService
ts 复制代码
// audit-log.service.ts
@Injectable({ providedIn: 'root' })
export class AuditLogService {
  log(action: string, resource: string, details?: any) {
    const logEntry = {
      userId: this.authService.getCurrentUserId(),
      action,
      resource,
      timestamp: new Date().toISOString(),
      details
    };

    // 发送到后端(可选)
    this.http.post('/api/logs', logEntry).subscribe();

    // 或本地存储(调试用)
    console.log('[AUDIT]', logEntry);
  }
}
在组件中调用
ts 复制代码
onDeleteUser(id: number) {
  this.userService.deleteUser(id).subscribe(() => {
    this.auditLog.log('delete', 'user', { id });
    this.loadData();
  });
}

✅ 建议:敏感操作必须落库;非敏感可仅前端 console 记录用于调试


八、完整目录结构建议

复制代码
src/
├── app/
│   ├── core/               # 核心服务(auth, http, audit)
│   ├── layout/             # 布局组件(header, sider)
│   ├── shared/             # 公共组件/管道
│   ├── views/
│   │   ├── dashboard/
│   │   └── users/          # 业务页面
│   ├── app-routing.module.ts
│   └── app.component.html  # 主布局

九、验证与参考

所有组件用法均来自 DevUI 官方文档(2025年12月前最新版):

⚠️ 注意:DevUI React/Vue 版本处于实验阶段,生产环境推荐使用 Angular 版本


相关推荐
喵手1 天前
构建云原生智能中台:DevUI 极致交互与 MateChat 智能体协作实战!
devui·matechat
黑臂麒麟2 天前
华为云 DevUI初体验:如何快速入门项目搭建
前端·ui·华为云·devui
喵手2 天前
云端双擎:基于 DevUI 与 MateChat 构建下一代企业级 AI 智能中台全景实战指南!
devui·matechat
喵手2 天前
智驭流转:基于 DevUI 与 MateChat 的企业级 DevOps 智能中台重构实录!
devui·matechat
喵手2 天前
云端双引擎:基于 DevUI 与 MateChat 共塑企业级智能中台的新范式
devui·matechat
喵手2 天前
DevUI 与 MateChat 重构云原生时代的“设计-交付”链路!
devui·matechat
喵手2 天前
云端双引擎:DevUI 与 MateChat 构建下一代智能云原生交互体系
devui·matechat
wuli_滔滔4 天前
DevUI云控制台实战:多云管理平台前端架构解密
前端·架构·devui·matechat
JarryStudy6 天前
DevUI国际化与本地化:多语言资源动态加载与RTL布局适配
国际化·rtl·devui·核心算法·智能回退