Files
wwjcloud/admin/docs/niucloud-migration-plan.md
万物街 dc6e9baec0 feat: 添加完整的前端管理系统 (VbenAdmin)
- 添加基于 VbenAdmin + Vue3 + Element Plus 的前端管理系统
- 包含完整的 UI 组件库和工具链
- 支持多应用架构 (web-ele, backend-mock, playground)
- 包含完整的开发规范和配置
- 修复 admin 目录的子模块问题,确保正确提交
2025-08-23 13:24:04 +08:00

23 KiB
Raw Blame History

Niucloud 前端迁移到 Vben Admin 规划文档

1. 项目概述

1.1 迁移目标

将 Niucloud PHP 项目的管理后台前端功能迁移到基于 Vben Admin 框架的现代化管理面板中。

1.2 架构层级映射

Niucloud 架构层级

  • app: 核心业务功能模块(用户、权限、菜单、系统设置等)
  • addons: 插件扩展模块(可选功能模块)
  • app (业务): 具体业务应用模块

WWJCloud 架构层级

  • common: 框架通用服务层(对应 Niucloud 的 app
  • addon: 插件扩展层(对应 Niucloud 的 addons
  • app: 业务开发层(对应 Niucloud 的业务 app

层级映射关系

Niucloud          →    WWJCloud
├── app/              ├── common/     (核心功能:用户、权限、设置等)
├── addons/           ├── addon/      (插件扩展:可选功能模块)
└── app(业务)/         └── app/        (具体业务电商、CRM、ERP等)

1.3 技术栈对比

项目 Niucloud Admin Vben Admin (目标)
框架 Vue 3 + TypeScript Vue 3 + TypeScript
UI库 Element Plus Element Plus
构建工具 Vite Vite
状态管理 Pinia Pinia
路由 Vue Router Vue Router
样式 SCSS + Tailwind SCSS + Tailwind

2. 目录结构对比分析

2.1 Niucloud Admin 结构

src/
├── app/                    # 应用层
│   ├── api/               # API 接口定义
│   ├── assets/            # 静态资源
│   ├── components/        # 业务组件
│   ├── lang/              # 国际化
│   └── views/             # 页面视图
│       ├── app/           # 应用管理
│       ├── auth/          # 权限管理
│       ├── channel/       # 渠道管理
│       ├── dict/          # 字典管理
│       ├── diy/           # 自定义页面
│       ├── finance/       # 财务管理
│       ├── home/          # 首页
│       ├── marketing/     # 营销管理
│       ├── member/        # 会员管理
│       ├── setting/       # 系统设置
│       └── tools/         # 工具管理
├── components/            # 通用组件
├── layout/               # 布局组件
├── router/               # 路由配置
├── stores/               # 状态管理
├── styles/               # 样式文件
├── types/                # 类型定义
└── utils/                # 工具函数

2.2 Vben Admin 结构

src/
├── adapter/              # 适配器层
├── api/                  # API 接口
├── layouts/              # 布局组件
├── locales/              # 国际化
├── router/               # 路由配置
│   └── routes/           # 路由模块
│       └── modules/      # 路由模块文件
├── store/                # 状态管理
└── views/                # 页面视图
    ├── _core/            # 核心页面
    ├── dashboard/        # 仪表板
    └── demos/            # 示例页面

3. 功能模块映射方案

3.1 功能模块映射(全部迁移到 Common 层)

根据项目实际情况,所有 Niucloud 功能模块都将迁移到 WWJCloud 的 Common 层,作为框架底层通用功能。

3.1.1 核心管理功能(高优先级)

Niucloud 模块 WWJCloud Common 位置 迁移优先级 功能说明
用户管理 (user) common/user 用户账户管理
角色权限 (auth) common/rbac RBAC 权限控制
菜单管理 (menu) common/rbac/menu 动态菜单管理
系统设置 (setting) common/settings 系统配置管理
字典管理 (dict) common/dict 数据字典管理
文件管理 (file) common/file 文件上传管理
站点管理 (site) common/settings/site 站点基础配置

3.1.2 业务管理功能(中优先级)

Niucloud 模块 WWJCloud Common 位置 迁移优先级 功能说明
会员管理 (member) common/member 会员系统管理
营销工具 (marketing) common/marketing 营销活动管理
财务管理 (finance) common/finance 财务数据管理
渠道管理 (channel) common/channel 销售渠道管理
应用管理 (app) common/app 应用配置管理
首页管理 (home) common/dashboard 仪表板管理

3.1.3 扩展功能模块(低优先级)

Niucloud 模块 WWJCloud Common 位置 迁移优先级 功能说明
海报管理 (poster) common/poster 海报设计工具
打印管理 (printer) common/printer 打印模板管理
微信平台 (wxoplatform) common/wechat 微信生态集成
工具集 (tools) common/tools 辅助工具集合
DIY 页面 (diy) common/diy 自定义页面构建
DIY 表单 (diy_form) common/diy-form 自定义表单构建

3.2 详细页面映射(全部映射到 Common 层)

3.2.1 权限管理模块 (auth/)

Niucloud: app/views/auth/
├── user.vue          → views/common/auth/user/index.vue
├── role.vue          → views/common/auth/role/index.vue
├── menu.vue          → views/common/auth/menu/index.vue
├── site_menu.vue     → views/common/auth/site-menu/index.vue
└── log.vue           → views/common/auth/log/index.vue

3.2.2 系统设置模块 (setting/)

Niucloud: app/views/setting/
├── system.vue        → views/common/setting/basic/index.vue
├── adminlogin.vue    → views/common/setting/login/index.vue
├── sms.vue           → views/common/setting/sms/index.vue
├── pay.vue           → views/common/setting/payment/index.vue
├── storage.vue       → views/common/setting/storage/index.vue
├── notice.vue        → views/common/setting/notification/index.vue
├── map.vue           → views/common/setting/map/index.vue
└── member.vue        → views/common/setting/member/index.vue

3.2.3 会员管理模块 (member/)

Niucloud: app/views/member/
├── member.vue        → views/common/member/list/index.vue
├── member_detail.vue → views/common/member/detail/index.vue
├── level.vue         → views/common/member/level/index.vue
├── label.vue         → views/common/member/label/index.vue
├── balance.vue       → views/common/member/balance/index.vue
├── point.vue         → views/common/member/point/index.vue
└── commission.vue    → views/common/member/commission/index.vue

3.2.4 应用管理模块 (app/)

Niucloud: app/views/app/
├── app.vue           → views/common/app/list/index.vue
├── app_detail.vue    → views/common/app/detail/index.vue
└── config.vue        → views/common/app/config/index.vue

3.2.5 营销管理模块 (marketing/)

Niucloud: app/views/marketing/
├── activity.vue      → views/common/marketing/activity/index.vue
├── coupon.vue        → views/common/marketing/coupon/index.vue
└── promotion.vue     → views/common/marketing/promotion/index.vue

3.2.6 财务管理模块 (finance/)

Niucloud: app/views/finance/
├── account.vue       → views/common/finance/account/index.vue
├── transaction.vue   → views/common/finance/transaction/index.vue
└── report.vue        → views/common/finance/report/index.vue

3.2.7 渠道管理模块 (channel/)

Niucloud: app/views/channel/
├── channel.vue       → views/common/channel/list/index.vue
├── config.vue        → views/common/channel/config/index.vue
└── statistics.vue    → views/common/channel/statistics/index.vue

3.2.8 字典管理模块 (dict/)

Niucloud: app/views/dict/
├── dict.vue          → views/common/dict/list/index.vue
├── dict_data.vue     → views/common/dict/data/index.vue
└── dict_type.vue     → views/common/dict/type/index.vue

3.2.9 文件管理模块 (file/)

Niucloud: app/views/file/
├── file.vue          → views/common/file/list/index.vue
├── upload.vue        → views/common/file/upload/index.vue
└── config.vue        → views/common/file/config/index.vue

3.2.10 扩展功能模块

Niucloud: app/views/poster/
├── poster.vue        → views/common/poster/list/index.vue
└── template.vue      → views/common/poster/template/index.vue

Niucloud: app/views/printer/
├── printer.vue       → views/common/printer/list/index.vue
└── template.vue      → views/common/printer/template/index.vue

Niucloud: app/views/wxoplatform/
├── config.vue        → views/common/wechat/config/index.vue
└── menu.vue          → views/common/wechat/menu/index.vue

Niucloud: app/views/tools/
├── generator.vue     → views/common/tools/generator/index.vue
└── backup.vue        → views/common/tools/backup/index.vue

Niucloud: app/views/diy/
├── page.vue          → views/common/diy/page/index.vue
└── component.vue     → views/common/diy/component/index.vue

Niucloud: app/views/diy_form/
├── form.vue          → views/common/diy-form/list/index.vue
└── builder.vue       → views/common/diy-form/builder/index.vue

4. 组件迁移策略

4.1 通用组件映射

Niucloud 组件 功能 Vben 替代方案
upload-image 图片上传 VbenUpload + 自定义适配
upload-file 文件上传 VbenUpload + 自定义适配
upload-video 视频上传 VbenUpload + 自定义适配
editor 富文本编辑器 VbenEditor 或 第三方编辑器
select-icon 图标选择器 VbenIconPicker
select-area 地区选择器 VbenAreaPicker 或 自定义
heat-map 热力图 自定义组件 + ECharts
video-player 视频播放器 第三方播放器组件

4.2 布局组件迁移

Niucloud 有多套布局主题:

  • admin (默认)
  • admin_simplicity (简洁)
  • bussiness (商务)
  • darkside (暗色)
  • profession (专业)

迁移策略: 统一使用 Vben Admin 的主题系统,通过配置实现多主题切换。

5. 路由配置迁移

5.1 路由结构对比

Niucloud 路由特点:

  • 基于文件系统的路由
  • 支持动态路由加载
  • 权限路由集成

Vben Admin 路由特点:

  • 模块化路由配置
  • 支持路由懒加载
  • 内置权限控制

5.2 路由迁移示例

// src/router/routes/modules/common.ts
import type { RouteRecordRaw } from 'vue-router';

const routes: RouteRecordRaw[] = [
  {
    path: '/common',
    name: 'Common',
    component: () => import('@/layouts/basic.vue'),
    meta: {
      title: '框架管理',
      icon: 'common',
      orderNo: 1000,
    },
    children: [
      {
        path: 'system',
        name: 'CommonSystem',
        meta: { title: '系统管理' },
        children: [
          {
            path: 'auth',
            name: 'CommonSystemAuth',
            meta: { title: '权限管理' },
            children: [
              {
                path: 'user',
                name: 'CommonSystemAuthUser',
                component: () => import('@/views/common/auth/user/index.vue'),
                meta: { title: '用户管理' },
              },
              {
                path: 'role',
                name: 'CommonSystemAuthRole',
                component: () => import('@/views/common/auth/role/index.vue'),
                meta: { title: '角色管理' },
              },
              {
                path: 'menu',
                name: 'CommonSystemAuthMenu',
                component: () => import('@/views/common/auth/menu/index.vue'),
                meta: { title: '菜单管理' },
              },
            ],
          },
          {
            path: 'setting',
            name: 'CommonSystemSetting',
            meta: { title: '系统设置' },
            children: [
              {
                path: 'basic',
                name: 'CommonSystemSettingBasic',
                component: () => import('@/views/common/setting/basic/index.vue'),
                meta: { title: '基础设置' },
              },
              {
                path: 'sms',
                name: 'CommonSystemSettingSms',
                component: () => import('@/views/common/setting/sms/index.vue'),
                meta: { title: '短信设置' },
              },
              {
                path: 'payment',
                name: 'CommonSystemSettingPayment',
                component: () => import('@/views/common/setting/payment/index.vue'),
                meta: { title: '支付设置' },
              },
              {
                path: 'storage',
                name: 'CommonSystemSettingStorage',
                component: () => import('@/views/common/setting/storage/index.vue'),
                meta: { title: '存储设置' },
              },
            ],
          },
          {
            path: 'member',
            name: 'CommonSystemMember',
            meta: { title: '会员管理' },
            children: [
              {
                path: 'list',
                name: 'CommonSystemMemberList',
                component: () => import('@/views/common/member/list/index.vue'),
                meta: { title: '会员列表' },
              },
              {
                path: 'level',
                name: 'CommonSystemMemberLevel',
                component: () => import('@/views/common/member/level/index.vue'),
                meta: { title: '会员等级' },
              },
            ],
          },
        ],
      },
      {
        path: 'file',
        name: 'CommonFile',
        meta: { title: '文件管理' },
        children: [
          {
            path: 'list',
            name: 'CommonFileList',
            component: () => import('@/views/common/file/list/index.vue'),
            meta: { title: '文件列表' },
          },
          {
            path: 'upload',
            name: 'CommonFileUpload',
            component: () => import('@/views/common/file/upload/index.vue'),
            meta: { title: '文件上传' },
          },
        ],
      },
    ],
  },
];

export default routes;

6. API 接口迁移

6.1 API 结构对比

Niucloud API 特点:

  • RESTful 风格
  • 统一响应格式
  • 内置权限验证

目标 API 结构:

  • 对接后端 NestJS API
  • 保持 RESTful 风格
  • JWT 认证

6.2 API 迁移示例

// src/api/auth.ts
import { request } from '@/api/request';

export interface UserListParams {
  page?: number;
  limit?: number;
  keyword?: string;
}

export interface UserInfo {
  id: number;
  username: string;
  nickname: string;
  email: string;
  status: number;
  created_at: string;
}

// 获取用户列表
export function getUserList(params: UserListParams) {
  return request<{
    list: UserInfo[];
    total: number;
  }>('/api/users', {
    method: 'GET',
    params,
  });
}

// 创建用户
export function createUser(data: Partial<UserInfo>) {
  return request('/api/users', {
    method: 'POST',
    data,
  });
}

// 更新用户
export function updateUser(id: number, data: Partial<UserInfo>) {
  return request(`/api/users/${id}`, {
    method: 'PUT',
    data,
  });
}

// 删除用户
export function deleteUser(id: number) {
  return request(`/api/users/${id}`, {
    method: 'DELETE',
  });
}

7. 状态管理迁移

7.1 Store 结构对比

Niucloud Stores:

  • app.ts (应用状态)
  • user.ts (用户状态)
  • system.ts (系统状态)
  • style.ts (样式状态)
  • tabbar.ts (标签栏状态)

Vben Admin Stores:

  • auth.ts (认证状态)
  • 其他业务状态按需添加

7.2 状态迁移示例

// src/store/modules/system.ts
import { defineStore } from 'pinia';

export interface SystemState {
  settings: {
    siteName: string;
    logo: string;
    copyright: string;
  };
  dictData: Record<string, any[]>;
}

export const useSystemStore = defineStore('system', {
  state: (): SystemState => ({
    settings: {
      siteName: '',
      logo: '',
      copyright: '',
    },
    dictData: {},
  }),
  
  getters: {
    getSiteName: (state) => state.settings.siteName,
    getDictByType: (state) => (type: string) => state.dictData[type] || [],
  },
  
  actions: {
    async fetchSettings() {
      // 获取系统设置
    },
    
    async fetchDictData() {
      // 获取字典数据
    },
  },
});

8. 样式迁移策略

8.1 样式文件迁移

保留的样式:

  • 业务相关的自定义样式
  • 品牌色彩定义
  • 特殊组件样式

替换的样式:

  • 基础布局样式 (使用 Vben 内置)
  • 通用组件样式 (使用 Element Plus)
  • 响应式断点 (使用 Vben 配置)

8.2 主题配置

// src/preferences.ts
export const preferences = {
  theme: {
    colorPrimary: '#1890ff', // 主色调
    mode: 'light', // 主题模式
  },
  layout: {
    sidebar: {
      collapsed: false,
      width: 240,
    },
    header: {
      height: 64,
    },
  },
};

9. 迁移实施计划

9.1 阶段一目录结构搭建1周

所有功能模块统一在 Common 层目录创建

src/views/
├── common/           # 框架通用功能层(所有 Niucloud 功能迁移到此层)
│   └──        # 系统管理模块
│       ├── auth/     # 权限管理
│       │   ├── user/ # 用户管理
│       │   ├── role/ # 角色管理
│       │   ├── menu/ # 菜单管理
│       │   ├── site-menu/ # 站点菜单管理
│       │   └── log/  # 操作日志
│       ├── setting/  # 系统设置
│       │   ├── basic/ # 基础设置
│       │   ├── login/ # 登录设置
│       │   ├── sms/  # 短信设置
│       │   ├── payment/ # 支付设置
│       │   ├── storage/ # 存储设置
│       │   ├── notification/ # 通知设置
│       │   ├── map/  # 地图设置
│       │   └── member/ # 会员设置
│   ├── member/       # 会员管理
│   │   ├── list/     # 会员列表
│   │   ├── detail/   # 会员详情
│   │   ├── level/    # 会员等级
│   │   ├── label/    # 会员标签
│   │   ├── balance/  # 余额管理
│   │   ├── point/    # 积分管理
│   │   └── commission/ # 佣金管理
│   ├── marketing/    # 营销管理
│   │   ├── activity/ # 营销活动
│   │   ├── coupon/   # 优惠券
│   │   └── promotion/ # 促销活动
│   ├── finance/      # 财务管理
│   │   ├── account/  # 账户管理
│   │   ├── transaction/ # 交易记录
│   │   └── report/   # 财务报表
│   ├── channel/      # 渠道管理
│   │   ├── list/     # 渠道列表
│   │   ├── config/   # 渠道配置
│   │   └── statistics/ # 渠道统计
│   ├── app/          # 应用管理
│   │   ├── list/     # 应用列表
│   │   ├── detail/   # 应用详情
│   │   └── config/   # 应用配置
│   ├── dict/         # 字典管理
│   │   ├── list/     # 字典列表
│   │   ├── data/     # 字典数据
│   │   └── type/     # 字典类型
│   ├── file/         # 文件管理
│   │   ├── list/     # 文件列表
│   │   ├── upload/   # 文件上传
│   │   └── config/   # 文件配置
│   ├── poster/       # 海报管理
│   │   ├── list/     # 海报列表
│   │   └── template/ # 海报模板
│   ├── printer/      # 打印管理
│   │   ├── list/     # 打印机列表
│   │   └── template/ # 打印模板
│   ├── wechat/       # 微信平台
│   │   ├── config/   # 微信配置
│   │   └── menu/     # 微信菜单
│   ├── tools/        # 工具集
│   │   ├── generator/ # 代码生成
│   │   └── backup/   # 数据备份
│   ├── diy/          # DIY 页面
│   │   ├── page/     # 页面管理
│   │   └── component/ # 组件管理
│   └── diy-form/     # DIY 表单
│       ├── list/     # 表单列表
│       └── builder/  # 表单构建器

9.2 阶段二Common 层核心功能迁移2-3周

  • 用户管理系统 (user)
  • 角色权限管理 (rbac)
  • 菜单管理系统 (rbac/menu)
  • 系统设置模块 (settings)
  • 数据字典管理 (dict)
  • 文件管理系统 (file)

9.3 阶段三App 层业务功能迁移3-4周

  • 会员管理系统 (crm/member)
  • 营销工具模块 (marketing)
  • 财务管理模块 (erp/finance)
  • 渠道管理系统 (channel)

9.4 阶段四Addon 层扩展功能迁移2-3周

  • 海报管理工具 (addons/poster)
  • 打印模板管理 (addons/printer)
  • 微信平台集成 (addons/wechat)
  • 辅助工具集合 (addons/tools)

9.5 阶段五优化和测试2周

  • 性能优化和代码重构
  • 跨浏览器兼容性测试
  • 用户体验优化
  • 技术文档完善

9.2 开发规范

  1. 组件开发:

    • 优先使用 Vben 封装组件
    • 其次使用 Element Plus 原生组件
    • 必要时开发自定义组件
  2. 代码规范:

    • 遵循 Vben Admin 代码规范
    • 使用 TypeScript 严格模式
    • 统一的 ESLint 和 Prettier 配置
  3. 测试策略:

    • 单元测试覆盖核心业务逻辑
    • E2E 测试覆盖关键用户流程
    • 兼容性测试确保多浏览器支持

10. 风险评估与应对

10.1 技术风险

风险项 影响程度 应对策略
组件兼容性 提前验证,准备降级方案
性能问题 代码分割,懒加载优化
数据迁移 制定详细的数据映射方案
用户体验差异 保持核心交互逻辑一致

10.2 进度风险

  • 人力资源: 确保有经验的前端开发人员参与
  • 时间安排: 预留充足的测试和调试时间
  • 需求变更: 建立变更控制流程

11. 验收标准

11.1 功能验收

  • 所有原有功能正常运行
  • 用户权限控制正确
  • 数据操作无误
  • 响应式布局适配

11.2 性能验收

  • 首屏加载时间 < 3s
  • 页面切换流畅
  • 大数据量列表渲染正常

11.3 兼容性验收

  • Chrome/Firefox/Safari 最新版本
  • 移动端适配
  • 不同分辨率屏幕适配

文档版本: v1.0
创建时间: 2025-01-22
更新时间: 2025-01-22
负责人: 开发团队
审核人: 项目经理