菜鸟科技网

后台模块添加步骤是怎样的?

下面我将为你提供一个通用、分步的指南,并结合一个具体的技术栈(如 Vue + Element UI + Spring Boot)作为示例,让你能更好地理解。

后台模块添加步骤是怎样的?-图1
(图片来源网络,侵删)

核心思想

添加一个后台模块,本质上是在后台系统中实现一套完整的 CRUD(创建、读取、更新、删除) 功能,并为其配置好前端路由、菜单和权限。

通用步骤详解

我们将整个过程分为四个主要阶段:

  1. 后端开发:提供数据接口和业务逻辑。
  2. 前端开发:创建页面、组件,并调用后端接口。
  3. 权限与菜单配置:将新模块集成到系统的导航和权限体系中。
  4. 部署与测试:确保新模块能正常运行。

后端开发

这是整个模块的基础,负责处理数据。

步骤 1:数据库设计

你需要为新模块设计数据库表结构。

后台模块添加步骤是怎样的?-图2
(图片来源网络,侵删)
  • 主表:存储模块的核心业务数据,添加一个“产品”模块,就需要一个 product 表。
  • 关联表:如果模块涉及分类、标签、用户等关联关系,需要设计相应的关联表。

示例 (SQL):

-- 创建产品表
CREATE TABLE `product` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `product_name` varchar(100) NOT NULL COMMENT '产品名称',
  `price` decimal(10,2) NOT NULL COMMENT '价格',
  `description` text COMMENT '产品描述',
  `status` tinyint(1) DEFAULT '1' COMMENT '状态:0-禁用,1-启用',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品表';

步骤 2:创建实体类

在项目中创建一个 Java (或其他语言) 类,用于映射数据库表。

示例 (Java - Spring Boot):

// Product.java
@Data
@TableName("product") // MyBatis-Plus 注解
public class Product {
    private Long id;
    private String productName;
    private BigDecimal price;
    private String description;
    private Integer status;
}

步骤 3:创建 Mapper/Repository 层

负责与数据库进行交互,实现基础的 CRUD 操作。

后台模块添加步骤是怎样的?-图3
(图片来源网络,侵删)

示例 (Java - Spring Boot / MyBatis-Plus):

// ProductMapper.java
public interface ProductMapper extends BaseMapper<Product> {
    // MyBatis-Plus 会自动实现基础的 CRUD,无需编写 SQL
}

步骤 4:创建 Service 层

封装业务逻辑,处理更复杂的操作,并调用 Mapper 层。

示例 (Java - Spring Boot):

// ProductService.java
@Service
public class ProductService extends ServiceImpl<ProductMapper, Product> {
    // 可以在这里添加自定义的业务逻辑方法
    // 分页查询产品
    public IPage<Product> getProductPage(Page<Product> page, String productName) {
        return this.lambdaQuery()
                .like(Product::getProductName, productName)
                .page(page);
    }
}

步骤 5:创建 Controller 层

提供 RESTful API 接口,供前端调用。

示例 (Java - Spring Boot):

// ProductController.java
@RestController
@RequestMapping("/api/product")
public class ProductController {
    @Autowired
    private ProductService productService;
    // 获取产品列表(分页)
    @GetMapping("/page")
    public R<IPage<Product>> getProductPage(Page<Product> page, String productName) {
        IPage<Product> productPage = productService.getProductPage(page, productName);
        return R.ok(productPage);
    }
    // 根据 ID 获取产品
    @GetMapping("/{id}")
    public R<Product> getProductById(@PathVariable Long id) {
        Product product = productService.getById(id);
        return R.ok(product);
    }
    // 新增产品
    @PostMapping
    public R<Boolean> addProduct(@RequestBody Product product) {
        return R.ok(productService.save(product));
    }
    // 更新产品
    @PutMapping
    public R<Boolean> updateProduct(@RequestBody Product product) {
        return R.ok(productService.updateById(product));
    }
    // 删除产品
    @DeleteMapping("/{id}")
    public R<Boolean> deleteProduct(@PathVariable Long id) {
        return R.ok(productService.removeById(id));
    }
}

至此,后端部分已完成,你可以使用 Postman 等工具测试这些 API 是否正常工作。


前端开发

前端负责将后端的数据以可视化的方式展示给用户,并接收用户的操作。

步骤 6:创建 Vue 组件

为新模块创建页面组件,通常包括一个列表页和一个表单页(新增/编辑)。

示例 (Vue 3):

<!-- views/product/ProductList.vue -->
<template>
  <div>
    <el-card>
      <el-form :inline="true" :model="queryParams" class="demo-form-inline">
        <el-form-item label="产品名称">
          <el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleQuery">查询</el-button>
          <el-button type="success" @click="handleAdd">新增</el-button>
        </el-form-item>
      </el-form>
      <el-table :data="productList" border>
        <el-table-column prop="id" label="ID" width="80" />
        <el-table-column prop="productName" label="产品名称" />
        <el-table-column prop="price" label="价格" />
        <el-table-column prop="status" label="状态">
          <template #default="scope">
            <el-tag :type="scope.row.status === 1 ? 'success' : 'danger'">
              {{ scope.row.status === 1 ? '启用' : '禁用' }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column label="操作" width="180" align="center">
          <template #default="scope">
            <el-button size="small" @click="handleUpdate(scope.row)">编辑</el-button>
            <el-button size="small" type="danger" @click="handleDelete(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <!-- 分页组件 -->
      <el-pagination
        v-model:current-page="queryParams.pageNum"
        v-model:page-size="queryParams.pageSize"
        :page-sizes="[10, 20, 50, 100]"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
      />
    </el-card>
    <!-- 新增/编辑对话框 -->
    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px">
      <el-form ref="productFormRef" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="产品名称" prop="productName">
          <el-input v-model="form.productName" placeholder="请输入产品名称" />
        </el-form-item>
        <el-form-item label="价格" prop="price">
          <el-input-number v-model="form.price" :precision="2" :step="0.1" :min="0" />
        </el-form-item>
        <el-form-item label="描述" prop="description">
          <el-input v-model="form.description" type="textarea" placeholder="请输入产品描述" />
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="dialog.visible = false">取 消</el-button>
          <el-button type="primary" @click="submitForm">确 定</el-button>
        </span>
      </template>
    </el-dialog>
  </div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import request from '@/utils/request' // 你的 axios 封装
// ... (数据定义、方法实现等)
// handleQuery, handleAdd, handleUpdate, handleDelete, submitForm 等方法
// 这些方法会调用后端 API
</script>

步骤 7:配置路由

将新创建的组件添加到前端路由配置中,使其可以通过 URL 访问。

示例 (Vue Router):

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import ProductList from '@/views/product/ProductList.vue'
const routes = [
  // ... 其他路由
  {
    path: '/product',
    component: ProductList,
    name: 'Product',
    meta: { title: '产品管理', icon: 'el-icon-goods' }
  }
]
const router = createRouter({
  history: createWebHistory(),
  routes
})
export default router

权限与菜单配置

这是将新模块“融入”系统的关键一步。

步骤 8:配置菜单

如果你的系统使用动态菜单,通常需要从后端获取菜单数据。

  1. 在数据库的 menupermission 表中添加一条新记录,指向新模块的路由地址。
  2. 确保当前登录用户拥有该菜单的权限。

示例 (数据库 menu 表):

INSERT INTO `menu` (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_time) VALUES
('产品管理', '2', '5', 'product', 'product/ProductList', '1', '0', 'C', '0', '0', 'system:product:list', 'el-icon-goods', NOW());

步骤 9:配置权限

确保只有拥有相应权限的用户才能访问该模块和执行相应操作。

  1. 后端:在 Controller 的方法上添加权限注解(如 @PreAuthorize("@ss.hasPermi('system:product:list')"))。
  2. 前端:在路由的 meta 字段中添加 rolespermissions 信息,并在全局路由守卫中进行校验。

部署与测试

步骤 10:打包与部署

  1. 前端:运行 npm run buildyarn build,将前端代码打包成静态文件。
  2. 后端:打包成可执行的 JAR 或 WAR 包。
  3. 将打包好的文件部署到服务器上,并确保服务正常运行。

步骤 11:功能测试

登录后台系统,进行全面的测试:

  • 菜单:检查新模块是否出现在左侧菜单栏。
  • 权限:使用不同权限的账号登录,验证是否能正常访问和操作。
  • 功能:测试新增、查询、编辑、删除、分页等所有功能是否按预期工作。
  • 数据:检查前后端数据交互是否正确,数据是否准确无误地展示和保存。

为后台添加模块是一个系统性的工程,但只要遵循 “后端先行,前后端并行,权限整合,最后测试” 的原则,整个过程就会变得清晰可控。

核心流程回顾: 数据库 → 后端API → 前端页面 → 前端路由 → 菜单权限 → 测试部署

希望这个详细的指南能帮助你顺利完成后台模块的添加!如果你使用的是其他技术栈(如 React + Ant Design + Node.js),原理也是完全一样的,只需要替换对应的技术实现即可。

分享:
扫描分享到社交APP
上一篇
下一篇