Skip to content

AI 模块导入指南

本指南说明如何将完整的 AI 模块整合到 NiuCloud 系统中,包括文件结构、导入步骤、菜单配置等。

一、模块概述

AI 模块是一个完整的业务模块,包含:

  • 后台管理功能(Admin)
  • API 接口(API)
  • 数据库表结构(SQL)
  • 前端页面(Vue)
  • 菜单配置(PHP)
  • 语言包(i18n)

二、文件结构说明

2.1 code 目录(可直接覆盖)

code 目录包含完整的源代码文件,可以直接复制到系统中使用。

模块名/
├── code/
│   ├── backend/                    # 后端文件
│   │   └── app/
│   │       ├── adminapi/
│   │       │   ├── controller/    # 后台控制器
│   │       │   └── route/        # 后台路由
│   │       ├── api/
│   │       │   ├── controller/    # API控制器
│   │       │   └── route/        # API路由
│   │       ├── service/
│   │       │   ├── admin/        # 后台服务
│   │       │   └── api/          # API服务
│   │       ├── model/            # 数据模型
│   │       ├── dict/             # 字典配置
│   │       └── lang/             # 语言包
│   ├── frontend/
│   │   ├── admin/                # 后台前端
│   │   │   └── src/
│   │   │       ├── api/          # API接口
│   │   │       ├── lang/         # 语言包
│   │   │       └── views/        # 页面组件
│   │   └── uni-app/             # 移动端前端
│   │       └── src/
│   │           ├── api/          # API接口
│   │           ├── pages/        # 页面
│   │           └── styles/       # 样式
├── files/                         # 需要合并的文件
│   ├── backend/                  # 后端合并文件
│   └── frontend/                 # 前端合并文件
└── sql/
    └── tables.sql               # 数据库表结构

2.2 各层文件对应关系

层级文件位置说明
后台控制器app/adminapi/controller/{模块}/处理后台管理请求
后台路由app/adminapi/route/{模块}.php后台路由配置
API控制器app/api/controller/{模块}/处理前端请求
API路由app/api/route/{模块}.phpAPI路由配置
后台服务app/service/admin/{模块}/后台业务逻辑
API服务app/service/api/{模块}/API业务逻辑
数据模型app/model/{模块}/数据库操作
字典配置app/dict/{模块}/枚举/常量配置
语言包app/lang/多语言支持

三、导入步骤

3.1 第一步:执行数据库表结构

找到模块目录下的 sql/tables.sql 文件,执行 SQL 语句创建数据库表。

bash
# 登录数据库
mysql -u root -p

# 选择数据库
use niucloud;

# 执行SQL
source sql/tables.sql;

3.2 第二步:复制后端代码

code/backend/ 目录下的所有文件复制到项目后端对应目录:

code/backend/app/  →  项目根目录/app/

注意:如果提示文件已存在,选择"合并"或"跳过",确保不覆盖已有的核心文件。

3.3 第三步:复制前端代码

code/frontend/ 目录下的所有文件复制到前端项目对应目录:

code/frontend/admin/src/  →  admin项目/src/
code/frontend/uni-app/src/  →  uni-app项目/src/

3.4 第四步:合并 files 目录文件

files 目录包含需要合并的文件(如路由文件、API接口文件),不能直接覆盖。

4.4.1 后台路由合并

找到 files/backend/app/adminapi/route/{模块}.php,复制其内容追加到已有的路由文件中。

php
// 原路由文件:app/adminapi/route/member.php
// 需要添加的内容(从 files 目录的对应文件复制)

use app\adminapi\middleware\AdminCheckToken;
use app\adminapi\middleware\AdminCheckRole;
use app\adminapi\middleware\AdminLog;
use think\facade\Route;

Route::group('member', function() {
    // ... 已有路由

    // 添加新的签到路由
    Route::put('sign/config', 'member.MemberSign/setConfig');
    Route::get('sign/config', 'member.MemberSign/config');
    Route::get('sign', 'member.MemberSign/lists');

})->middleware([
    AdminCheckToken::class,
    AdminCheckRole::class,
    AdminLog::class
]);

4.4.2 API路由合并

同样方式合并 files/backend/app/api/route/{模块}.php 到 API 路由文件。

4.4.3 前端API接口合并

复制 files/frontend/admin/src/api/{模块}.ts 内容追加到后台前端 API 文件。

复制 files/frontend/uni-app/src/api/{模块}.ts 内容追加到移动端 API 文件。

4.4.4 页面路由合并(如有)

复制 files/frontend/uni-app/src/pages.json 内容合并到 uni-app 的 pages.json。

3.5 第五步:配置菜单

菜单采用 PHP 配置文件方式,配置在 app/dict/menu/admin.php 中。

5.5.1 菜单配置结构

php
[
    'menu_name' => '签到管理',           // 菜单显示名称
    'menu_key' => 'sign',                // 菜单唯一标识
    'menu_short_name' => '签到管理',     // 简称
    'parent_key' => 'app',              // 父级菜单key
    'menu_type' => '0',                  // 0-目录/页面,1-按钮,2-操作
    'icon' => 'element FolderChecked',  // 菜单图标
    'api_url' => 'member/sign',          // API地址(按钮类型必填)
    'router_path' => 'marketing/sign',  // 前端路由路径
    'view_path' => 'marketing/sign_list', # 前端视图路径
    'methods' => 'get',                  // HTTP方法
    'sort' => '30',                      // 排序
    'status' => '1',                    // 状态:0-禁用,1-启用
    'is_show' => '1',                   // 是否显示:0-隐藏,1-显示
    'children' => [
        // 子菜单
    ]
]

5.5.2 菜单类型说明

menu_type类型说明必填字段
0目录/页面页面菜单icon, router_path, view_path
1按钮页面按钮api_url, methods
2操作行内操作api_url, methods

5.5.3 菜单层级规范

一级菜单(应用目录 menu_type=0)
└── 二级菜单(功能页面 menu_type=0)
    └── 三级菜单(操作按钮 menu_type=1 或 menu_type=2)

5.5.4 菜单配置示例

php
// app/dict/menu/admin.php

return [
    // ========== 一级菜单(应用目录)==========
    [
        'menu_name' => '应用管理',
        'menu_key' => 'app',
        'menu_short_name' => '应用',
        'parent_key' => '',
        'menu_type' => '0',
        'icon' => 'iconfont iconyingyong21',
        'api_url' => '',
        'router_path' => '',
        'view_path' => '',
        'methods' => '',
        'sort' => '86',
        'status' => '1',
        'is_show' => '1',
        'children' => [],
    ],

    // ========== 二级菜单(功能页面)==========
    [
        'menu_name' => '签到管理',
        'menu_key' => 'sign',
        'parent_key' => 'app',
        'menu_short_name' => '签到管理',
        'menu_type' => '0',
        'icon' => 'element FolderChecked',
        'api_url' => '',
        'router_path' => 'marketing/sign/config',
        'view_path' => '',
        'methods' => 'get',
        'sort' => '30',
        'status' => '1',
        'is_show' => '1',
        'children' => [
            // ========== 三级菜单(操作按钮)==========
            [
                'menu_name' => '签到设置',
                'menu_key' => 'sign_set',
                'menu_short_name' => '签到设置',
                'parent_key' => 'sign',
                'menu_type' => '1',
                'icon' => '',
                'api_url' => 'member/sign/config',
                'router_path' => 'marketing/sign/config',
                'view_path' => 'marketing/sign_config',
                'methods' => 'get',
                'sort' => '30',
                'status' => '1',
                'is_show' => '1',
                'children' => [
                    [
                        'menu_name' => '保存',
                        'menu_key' => 'save_sign_set',
                        'menu_short_name' => '保存',
                        'parent_key' => 'sign_set',
                        'menu_type' => '2',
                        'icon' => '',
                        'api_url' => 'member/sign/config',
                        'router_path' => '',
                        'view_path' => '',
                        'methods' => 'put',
                        'sort' => '100',
                        'status' => '1',
                        'is_show' => '1',
                    ]
                ]
            ],
            [
                'menu_name' => '签到记录',
                'menu_key' => 'sign_list',
                'menu_short_name' => '签到记录',
                'parent_key' => 'sign',
                'menu_type' => '1',
                'icon' => '',
                'api_url' => 'member/sign',
                'router_path' => 'marketing/sign',
                'view_path' => 'marketing/sign_list',
                'methods' => 'get',
                'sort' => '30',
                'status' => '1',
                'is_show' => '1',
            ]
        ],
    ],
];

3.6 第六步:配置语言包

将模块的语言包配置添加到系统的语言文件中:

  • app/lang/zh-cn.php - 中文语言包
  • app/lang/en.php - 英文语言包
php
// zh-cn.php 添加
'sign_set' => '签到设置',
'sign_list' => '签到记录',
'SIGN_SUCCESS' => '签到成功',

// en.php 添加
'sign_set' => 'Sign Settings',
'sign_list' => 'Sign Records',
'SIGN_SUCCESS' => 'Sign in successful',

3.7 第七步:测试验证

  1. 清理缓存:php think clear
  2. 访问后台管理页面,检查菜单是否显示
  3. 测试各项功能是否正常

四、导入检查清单

步骤操作状态
1执行 sql/tables.sql 创建数据表
2复制 code/backend/ 到后端目录
3复制 code/frontend/ 到前端目录
4合并 files/backend/ 路由文件
5合并 files/frontend/ API文件
6添加菜单配置到 admin.php
7添加语言包配置
8清理缓存并测试

五、常见问题

5.1 路由冲突

如果合并路由时出现冲突(如路由已存在),检查并调整路由名称。

5.2 菜单不显示

  1. 确认菜单配置已添加到 app/dict/menu/admin.php
  2. 确认 menu_key 全局唯一
  3. 确认父级菜单存在且 status=1

5.3 API 404

  1. 检查路由是否正确合并
  2. 检查控制器命名空间是否正确
  3. 检查路由中间件配置

5.4 前端页面空白

  1. 检查 view_path 路径是否正确
  2. 检查页面组件是否正确复制
  3. 检查路由配置是否正确