zhibo/模块文档/缘池管理端设计文档.md

30 KiB
Raw Blame History

缘池管理端设计文档

版本V1.0
更新日期2025-12-30
功能范围:板块管理 + 消息管理 + 自动审核


一、功能概述

缘池是直播平台的社交社区模块,用户可在不同板块发布消息进行交流。管理端提供板块配置、消息审核、自动审核规则设置等功能。

1.1 功能结构

缘池管理 (/community)
├── 板块管理 - 配置社区板块分类
├── 消息管理 - 查看/审核/管理用户消息
└── 审核配置 - 自动审核规则设置

1.2 自动审核机制

用户发布消息 → 敏感词检测 → 自动判定
                    ↓
        ┌──────────┼──────────┐
        ↓          ↓          ↓
     无敏感词    轻度敏感    重度敏感
        ↓          ↓          ↓
     自动通过    待人工审核   自动拒绝

二、前端设计

2.1 路由配置

文件:Zhibo/admin/src/router/modules/communityManage.js

import Layout from '@/layout';

const communityManageRouter = {
  path: '/community',
  component: Layout,
  redirect: '/community/category',
  name: 'Community',
  alwaysShow: true,
  meta: {
    title: '缘池管理',
    icon: 'el-icon-s-opportunity',
  },
  children: [
    {
      path: 'category',
      component: () => import('@/views/community/category/index'),
      name: 'CommunityCategory',
      meta: { title: '板块管理', icon: '' },
    },
    {
      path: 'message',
      component: () => import('@/views/community/message/index'),
      name: 'CommunityMessage',
      meta: { title: '消息管理', icon: '' },
    },
    {
      path: 'audit-config',
      component: () => import('@/views/community/auditConfig/index'),
      name: 'CommunityAuditConfig',
      meta: { title: '审核配置', icon: '' },
    },
  ],
};

export default communityManageRouter;

2.2 API接口

文件:Zhibo/admin/src/api/community.js

import request from '@/utils/request';

// ==================== 板块管理 ====================

// 获取板块列表
export function categoryList(params) {
  return request({
    url: '/admin/community/category/list',
    method: 'get',
    params,
  });
}

// 保存板块(新增/编辑)
export function categorySave(data) {
  return request({
    url: '/admin/community/category/save',
    method: 'post',
    data,
  });
}

// 删除板块
export function categoryDelete(id) {
  return request({
    url: `/admin/community/category/delete/${id}`,
    method: 'delete',
  });
}

// 更新板块状态
export function categoryStatus(data) {
  return request({
    url: '/admin/community/category/status',
    method: 'post',
    data,
  });
}

// ==================== 消息管理 ====================

// 获取消息列表(分页)
export function messageList(data) {
  return request({
    url: '/admin/community/message/list',
    method: 'post',
    data,
  });
}

// 审核消息
export function messageAudit(data) {
  return request({
    url: '/admin/community/message/audit',
    method: 'post',
    data,
  });
}

// 删除消息
export function messageDelete(id) {
  return request({
    url: `/admin/community/message/delete/${id}`,
    method: 'delete',
  });
}

// ==================== 审核配置 ====================

// 获取审核配置
export function getAuditConfig() {
  return request({
    url: '/admin/community/audit/config',
    method: 'get',
  });
}

// 保存审核配置
export function saveAuditConfig(data) {
  return request({
    url: '/admin/community/audit/config/save',
    method: 'post',
    data,
  });
}

2.3 页面设计

2.3.1 板块管理页面

文件:Zhibo/admin/src/views/community/category/index.vue

┌─────────────────────────────────────────────────────────────┐
│ [+ 新增板块]                                                │
├─────────────────────────────────────────────────────────────┤
│ 图标 │ 名称   │ 排序 │ 状态   │ 创建时间   │ 操作          │
├──────┼────────┼──────┼────────┼────────────┼───────────────┤
│ 🎮   │ 游戏   │ 100  │ ●启用  │ 2025-01-01 │ [编辑][删除]  │
│ 🎵   │ 音乐   │ 90   │ ●启用  │ 2025-01-01 │ [编辑][删除]  │
│ 💬   │ 交友   │ 80   │ ○禁用  │ 2025-01-01 │ [编辑][删除]  │
└─────────────────────────────────────────────────────────────┘

功能说明:

  • 新增板块:弹窗表单,填写名称、图标、排序
  • 编辑板块:弹窗表单,修改板块信息
  • 删除板块:确认弹窗后删除
  • 状态切换:开关组件,启用/禁用板块

2.3.2 消息管理页面

文件:Zhibo/admin/src/views/community/message/index.vue

┌─────────────────────────────────────────────────────────────────────┐
│ 板块[全部▼] 状态[全部▼] 审核方式[全部▼] 时间[起始-结束] [搜索]    │
├─────────────────────────────────────────────────────────────────────┤
│ 用户     │ 板块 │ 内容         │ 图片 │ 状态   │ 审核方式│ 操作    │
├──────────┼──────┼──────────────┼──────┼────────┼─────────┼─────────┤
│ 👤张三   │ 游戏 │ 今天开黑吗.. │ 🖼x2 │ 已通过 │ 自动    │ [删除]  │
│ 👤李四   │ 交友 │ 有人一起..   │ 🖼x1 │ 待审核 │ -       │ [✓][✗]  │
│ 👤王五   │ 音乐 │ 推荐一首..   │ -    │ 已拒绝 │ 自动    │ [删除]  │
└─────────────────────────────────────────────────────────────────────┘

筛选条件:

  • 板块:下拉选择板块
  • 状态:全部/待审核/已通过/已拒绝
  • 审核方式:全部/自动/人工
  • 时间范围:日期选择器

操作说明:

  • 待审核消息:显示[通过][拒绝]按钮
  • 已审核消息:显示[删除]按钮
  • 点击内容可展开查看完整内容和图片

2.3.3 审核配置页面

文件:Zhibo/admin/src/views/community/auditConfig/index.vue

┌─────────────────────────────────────────────────────────────┐
│ 自动审核配置                                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  开启自动审核                    [========●]                │
│  说明:开启后系统自动检测敏感词并审核                       │
│                                                             │
│  无敏感词自动通过                [========●]                │
│  说明:消息不含敏感词时自动通过审核                         │
│                                                             │
│  重度敏感词自动拒绝              [========●]                │
│  说明:消息含违禁词时自动拒绝                               │
│                                                             │
│                                        [保存配置]           │
└─────────────────────────────────────────────────────────────┘

三、数据库设计

3.1 板块表 (eb_community_category)

字段 类型 说明
id int 板块ID主键自增
name varchar(50) 板块名称
icon varchar(255) 板块图标URL
sort int 排序(越大越靠前)
status tinyint 状态 0禁用 1启用
create_time datetime 创建时间
update_time datetime 更新时间

3.2 消息表 (eb_community_message)

字段 类型 说明
id bigint 消息ID主键自增
uid int 用户ID
category_id int 板块ID
content text 消息内容
images varchar(1000) 图片URL(逗号分隔)
status tinyint 状态 0待审核 1通过 2拒绝
audit_type tinyint 审核方式 0自动 1人工
audit_remark varchar(255) 审核备注
is_delete tinyint 是否删除 0否 1是
create_time datetime 创建时间
update_time datetime 更新时间

3.3 审核配置表 (eb_community_audit_config)

字段 类型 说明
id int 配置ID固定为1
auto_audit tinyint 开启自动审核 0关闭 1开启
auto_pass tinyint 无敏感词自动通过 0否 1是
auto_reject tinyint 重度敏感词自动拒绝 0否 1是
update_time datetime 更新时间

3.4 建表SQL

-- ============================================
-- 缘池管理数据库表
-- ============================================

-- 1. 板块表
CREATE TABLE `eb_community_category` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '板块ID',
  `name` varchar(50) NOT NULL COMMENT '板块名称',
  `icon` varchar(255) DEFAULT '' COMMENT '板块图标URL',
  `sort` int DEFAULT 0 COMMENT '排序(越大越靠前)',
  `status` tinyint 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. 消息表
CREATE TABLE `eb_community_message` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '消息ID',
  `uid` int NOT NULL COMMENT '用户ID',
  `category_id` int NOT NULL COMMENT '板块ID',
  `content` text COMMENT '消息内容',
  `images` varchar(1000) DEFAULT '' COMMENT '图片URL(逗号分隔)',
  `status` tinyint DEFAULT 1 COMMENT '状态 0待审核 1通过 2拒绝',
  `audit_type` tinyint DEFAULT 0 COMMENT '审核方式 0自动 1人工',
  `audit_remark` varchar(255) DEFAULT '' COMMENT '审核备注(敏感词等)',
  `is_delete` tinyint DEFAULT 0 COMMENT '是否删除 0否 1是',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_uid` (`uid`),
  KEY `idx_category` (`category_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='缘池消息表';

-- 3. 审核配置表
CREATE TABLE `eb_community_audit_config` (
  `id` int NOT NULL AUTO_INCREMENT,
  `auto_audit` tinyint DEFAULT 1 COMMENT '开启自动审核 0关闭 1开启',
  `auto_pass` tinyint DEFAULT 1 COMMENT '无敏感词自动通过 0否 1是',
  `auto_reject` tinyint DEFAULT 1 COMMENT '重度敏感词自动拒绝 0否 1是',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='缘池审核配置表';

-- 初始化审核配置
INSERT INTO `eb_community_audit_config` (`id`, `auto_audit`, `auto_pass`, `auto_reject`) 
VALUES (1, 1, 1, 1);

-- 初始化默认板块
INSERT INTO `eb_community_category` (`name`, `icon`, `sort`, `status`) VALUES
('交友', 'el-icon-user', 100, 1),
('游戏', 'el-icon-video-play', 90, 1),
('音乐', 'el-icon-headset', 80, 1),
('运动', 'el-icon-football', 70, 1),
('美食', 'el-icon-food', 60, 1);

四、后端设计

4.1 实体类

CommunityCategory.java

文件:crmeb-common/src/main/java/com/zbkj/common/model/community/CommunityCategory.java

package com.zbkj.common.model.community;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;

@Data
@TableName("eb_community_category")
public class CommunityCategory {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private String icon;
    private Integer sort;
    private Integer status;
    private Date createTime;
    private Date updateTime;
}

CommunityMessage.java

文件:crmeb-common/src/main/java/com/zbkj/common/model/community/CommunityMessage.java

package com.zbkj.common.model.community;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;

@Data
@TableName("eb_community_message")
public class CommunityMessage {
    @TableId(type = IdType.AUTO)
    private Long id;
    private Integer uid;
    private Integer categoryId;
    private String content;
    private String images;
    private Integer status;      // 0待审核 1通过 2拒绝
    private Integer auditType;   // 0自动 1人工
    private String auditRemark;
    private Integer isDelete;
    private Date createTime;
    private Date updateTime;
}

CommunityAuditConfig.java

文件:crmeb-common/src/main/java/com/zbkj/common/model/community/CommunityAuditConfig.java

package com.zbkj.common.model.community;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;

@Data
@TableName("eb_community_audit_config")
public class CommunityAuditConfig {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private Integer autoAudit;    // 开启自动审核
    private Integer autoPass;     // 无敏感词自动通过
    private Integer autoReject;   // 重度敏感词自动拒绝
    private Date updateTime;
}

4.2 Controller

文件:crmeb-admin/src/main/java/com/zbkj/admin/controller/CommunityAdminController.java

package com.zbkj.admin.controller;

import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.community.*;
import com.zbkj.common.request.CommunityMessageRequest;
import com.zbkj.common.request.CommunityAuditRequest;
import com.zbkj.common.response.CommunityMessageVO;
import com.zbkj.common.result.CommonResult;
import com.zbkj.service.service.CommunityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/admin/community")
@Api(tags = "缘池管理")
public class CommunityAdminController {

    @Autowired
    private CommunityService communityService;

    // ==================== 板块管理 ====================
    
    @ApiOperation("板块列表")
    @GetMapping("/category/list")
    public CommonResult<List<CommunityCategory>> categoryList() {
        return CommonResult.success(communityService.getCategoryList());
    }

    @ApiOperation("保存板块")
    @PostMapping("/category/save")
    public CommonResult<String> categorySave(@RequestBody CommunityCategory category) {
        communityService.saveCategory(category);
        return CommonResult.success("保存成功");
    }

    @ApiOperation("删除板块")
    @DeleteMapping("/category/delete/{id}")
    public CommonResult<String> categoryDelete(@PathVariable Integer id) {
        communityService.deleteCategory(id);
        return CommonResult.success("删除成功");
    }

    @ApiOperation("更新板块状态")
    @PostMapping("/category/status")
    public CommonResult<String> categoryStatus(@RequestBody CommunityCategory category) {
        communityService.updateCategoryStatus(category.getId(), category.getStatus());
        return CommonResult.success("更新成功");
    }

    // ==================== 消息管理 ====================
    
    @ApiOperation("消息列表")
    @PostMapping("/message/list")
    public CommonResult<PageInfo<CommunityMessageVO>> messageList(
            @RequestBody CommunityMessageRequest request) {
        return CommonResult.success(communityService.getMessageList(request));
    }

    @ApiOperation("审核消息")
    @PostMapping("/message/audit")
    public CommonResult<String> messageAudit(@RequestBody CommunityAuditRequest request) {
        communityService.auditMessage(request.getId(), request.getStatus(), request.getRemark());
        return CommonResult.success("审核成功");
    }

    @ApiOperation("删除消息")
    @DeleteMapping("/message/delete/{id}")
    public CommonResult<String> messageDelete(@PathVariable Long id) {
        communityService.deleteMessage(id);
        return CommonResult.success("删除成功");
    }

    // ==================== 审核配置 ====================
    
    @ApiOperation("获取审核配置")
    @GetMapping("/audit/config")
    public CommonResult<CommunityAuditConfig> getAuditConfig() {
        return CommonResult.success(communityService.getAuditConfig());
    }

    @ApiOperation("保存审核配置")
    @PostMapping("/audit/config/save")
    public CommonResult<String> saveAuditConfig(@RequestBody CommunityAuditConfig config) {
        communityService.saveAuditConfig(config);
        return CommonResult.success("保存成功");
    }
}

4.3 Service

文件:crmeb-service/src/main/java/com/zbkj/service/service/CommunityService.java

package com.zbkj.service.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.community.*;
import com.zbkj.common.request.CommunityMessageRequest;
import com.zbkj.common.response.CommunityMessageVO;
import com.zbkj.service.dao.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class CommunityService {

    @Autowired
    private CommunityCategoryDao categoryDao;
    @Autowired
    private CommunityMessageDao messageDao;
    @Autowired
    private CommunityAuditConfigDao auditConfigDao;
    @Autowired
    private SensitiveWordService sensitiveWordService;

    // ==================== 板块管理 ====================
    
    public List<CommunityCategory> getCategoryList() {
        return categoryDao.selectList(new QueryWrapper<CommunityCategory>()
            .orderByDesc("sort"));
    }

    public void saveCategory(CommunityCategory category) {
        if (category.getId() != null) {
            categoryDao.updateById(category);
        } else {
            categoryDao.insert(category);
        }
    }

    public void deleteCategory(Integer id) {
        categoryDao.deleteById(id);
    }

    public void updateCategoryStatus(Integer id, Integer status) {
        CommunityCategory category = new CommunityCategory();
        category.setId(id);
        category.setStatus(status);
        categoryDao.updateById(category);
    }

    // ==================== 消息管理 ====================
    
    public PageInfo<CommunityMessageVO> getMessageList(CommunityMessageRequest request) {
        PageHelper.startPage(request.getPage(), request.getLimit());
        List<CommunityMessageVO> list = messageDao.selectMessageList(request);
        return new PageInfo<>(list);
    }

    public void auditMessage(Long id, Integer status, String remark) {
        CommunityMessage message = new CommunityMessage();
        message.setId(id);
        message.setStatus(status);
        message.setAuditType(1); // 人工审核
        message.setAuditRemark(remark != null ? remark : (status == 1 ? "人工审核通过" : "人工审核拒绝"));
        messageDao.updateById(message);
    }

    public void deleteMessage(Long id) {
        CommunityMessage message = new CommunityMessage();
        message.setId(id);
        message.setIsDelete(1);
        messageDao.updateById(message);
    }

    // ==================== 自动审核(移动端发布时调用) ====================
    
    public void autoAuditMessage(CommunityMessage message) {
        CommunityAuditConfig config = getAuditConfig();
        
        // 未开启自动审核,待人工审核
        if (config.getAutoAudit() != 1) {
            message.setStatus(0);
            return;
        }

        // 敏感词检测
        String content = message.getContent();
        List<String> sensitiveWords = sensitiveWordService.findAll(content);
        
        if (sensitiveWords.isEmpty()) {
            // 无敏感词
            if (config.getAutoPass() == 1) {
                message.setStatus(1);
                message.setAuditRemark("自动审核通过");
            } else {
                message.setStatus(0);
            }
            message.setAuditType(0);
        } else if (sensitiveWordService.hasSevereWord(sensitiveWords)) {
            // 重度敏感词
            if (config.getAutoReject() == 1) {
                message.setStatus(2);
                message.setAuditRemark("含违禁词自动拒绝");
            } else {
                message.setStatus(0);
                message.setAuditRemark("含敏感词:" + String.join(",", sensitiveWords));
            }
            message.setAuditType(0);
        } else {
            // 轻度敏感词,待人工审核
            message.setStatus(0);
            message.setAuditRemark("含敏感词:" + String.join(",", sensitiveWords));
            message.setAuditType(0);
        }
    }

    // ==================== 审核配置 ====================
    
    public CommunityAuditConfig getAuditConfig() {
        return auditConfigDao.selectById(1);
    }

    public void saveAuditConfig(CommunityAuditConfig config) {
        config.setId(1);
        auditConfigDao.updateById(config);
    }
}

4.4 DAO层

CommunityCategoryDao.java

文件:crmeb-service/src/main/java/com/zbkj/service/dao/CommunityCategoryDao.java

package com.zbkj.service.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zbkj.common.model.community.CommunityCategory;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface CommunityCategoryDao extends BaseMapper<CommunityCategory> {
}

CommunityMessageDao.java

文件:crmeb-service/src/main/java/com/zbkj/service/dao/CommunityMessageDao.java

package com.zbkj.service.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zbkj.common.model.community.CommunityMessage;
import com.zbkj.common.request.CommunityMessageRequest;
import com.zbkj.common.response.CommunityMessageVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
public interface CommunityMessageDao extends BaseMapper<CommunityMessage> {
    List<CommunityMessageVO> selectMessageList(@Param("req") CommunityMessageRequest request);
}

CommunityAuditConfigDao.java

文件:crmeb-service/src/main/java/com/zbkj/service/dao/CommunityAuditConfigDao.java

package com.zbkj.service.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zbkj.common.model.community.CommunityAuditConfig;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface CommunityAuditConfigDao extends BaseMapper<CommunityAuditConfig> {
}

4.5 Mapper XML

文件:crmeb-service/src/main/resources/mapper/community/CommunityMessageMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zbkj.service.dao.CommunityMessageDao">

    <select id="selectMessageList" resultType="com.zbkj.common.response.CommunityMessageVO">
        SELECT 
            m.id, m.uid, m.category_id, m.content, m.images,
            m.status, m.audit_type, m.audit_remark, m.create_time,
            u.nickname, u.avatar,
            c.name as category_name
        FROM eb_community_message m
        LEFT JOIN eb_user u ON m.uid = u.uid
        LEFT JOIN eb_community_category c ON m.category_id = c.id
        WHERE m.is_delete = 0
        <if test="req.categoryId != null">
            AND m.category_id = #{req.categoryId}
        </if>
        <if test="req.status != null">
            AND m.status = #{req.status}
        </if>
        <if test="req.auditType != null">
            AND m.audit_type = #{req.auditType}
        </if>
        <if test="req.startTime != null and req.endTime != null">
            AND m.create_time BETWEEN #{req.startTime} AND #{req.endTime}
        </if>
        ORDER BY m.create_time DESC
    </select>

</mapper>

4.6 Request/Response类

CommunityMessageRequest.java

文件:crmeb-common/src/main/java/com/zbkj/common/request/CommunityMessageRequest.java

package com.zbkj.common.request;

import lombok.Data;

@Data
public class CommunityMessageRequest {
    private Integer page = 1;
    private Integer limit = 20;
    private Integer categoryId;  // 板块ID
    private Integer status;      // 状态
    private Integer auditType;   // 审核方式
    private String startTime;    // 开始时间
    private String endTime;      // 结束时间
}

CommunityAuditRequest.java

文件:crmeb-common/src/main/java/com/zbkj/common/request/CommunityAuditRequest.java

package com.zbkj.common.request;

import lombok.Data;

@Data
public class CommunityAuditRequest {
    private Long id;        // 消息ID
    private Integer status; // 审核状态 1通过 2拒绝
    private String remark;  // 审核备注
}

CommunityMessageVO.java

文件:crmeb-common/src/main/java/com/zbkj/common/response/CommunityMessageVO.java

package com.zbkj.common.response;

import lombok.Data;
import java.util.Date;

@Data
public class CommunityMessageVO {
    private Long id;
    private Integer uid;
    private Integer categoryId;
    private String content;
    private String images;
    private Integer status;
    private Integer auditType;
    private String auditRemark;
    private Date createTime;
    // 关联字段
    private String nickname;      // 用户昵称
    private String avatar;        // 用户头像
    private String categoryName;  // 板块名称
}

五、文件清单

5.1 前端文件

Zhibo/admin/src/
├── api/
│   └── community.js                    # API接口
├── router/modules/
│   └── communityManage.js              # 路由配置
└── views/community/
    ├── category/
    │   └── index.vue                   # 板块管理页面
    ├── message/
    │   └── index.vue                   # 消息管理页面
    └── auditConfig/
        └── index.vue                   # 审核配置页面

5.2 后端文件

Zhibo/zhibo-h/
├── crmeb-admin/src/main/java/com/zbkj/admin/controller/
│   └── CommunityAdminController.java   # 控制器
├── crmeb-service/src/main/java/com/zbkj/service/
│   ├── service/
│   │   └── CommunityService.java       # 服务层
│   └── dao/
│       ├── CommunityCategoryDao.java   # 板块DAO
│       ├── CommunityMessageDao.java    # 消息DAO
│       └── CommunityAuditConfigDao.java # 配置DAO
├── crmeb-service/src/main/resources/mapper/community/
│   └── CommunityMessageMapper.xml      # Mapper XML
└── crmeb-common/src/main/java/com/zbkj/common/
    ├── model/community/
    │   ├── CommunityCategory.java      # 板块实体
    │   ├── CommunityMessage.java       # 消息实体
    │   └── CommunityAuditConfig.java   # 配置实体
    ├── request/
    │   ├── CommunityMessageRequest.java # 消息查询请求
    │   └── CommunityAuditRequest.java   # 审核请求
    └── response/
        └── CommunityMessageVO.java      # 消息响应VO

5.3 数据库

eb_community_category      # 板块表
eb_community_message       # 消息表
eb_community_audit_config  # 审核配置表

六、菜单配置SQL

-- 添加缘池管理菜单
INSERT INTO `eb_system_menu` (`pid`, `name`, `icon`, `perms`, `component`, `menu_type`, `sort`, `is_show`) VALUES
(0, '缘池管理', 'el-icon-s-opportunity', '', '/community', 'M', 140, 1);

SET @community_id = LAST_INSERT_ID();

INSERT INTO `eb_system_menu` (`pid`, `name`, `icon`, `perms`, `component`, `menu_type`, `sort`, `is_show`) VALUES
(@community_id, '板块管理', '', 'admin:community:category', '/community/category', 'C', 3, 1),
(@community_id, '消息管理', '', 'admin:community:message', '/community/message', 'C', 2, 1),
(@community_id, '审核配置', '', 'admin:community:audit', '/community/audit-config', 'C', 1, 1);

七、开发顺序

  1. 数据库 - 执行建表SQL
  2. 后端实体类 - 创建Model类
  3. 后端DAO - 创建DAO接口和Mapper
  4. 后端Service - 实现业务逻辑
  5. 后端Controller - 实现API接口
  6. 前端API - 创建接口文件
  7. 前端路由 - 配置路由
  8. 前端页面 - 实现三个管理页面
  9. 菜单配置 - 执行菜单SQL