基于Vue与SpringBoot的植物种植管理平台 - 源码深度解析
在当今农业数字化转型的浪潮中,传统种植管理方式面临着数据分散、效率低下、追溯困难等核心挑战。针对这一行业痛点,我们设计并实现了一套智能植物种植管理平台,通过前后端分离架构和模块化设计,为种植者提供全生命周期的数字化管理解决方案。
系统架构与技术栈
平台采用典型的前后端分离架构,前端基于Vue.js框架构建用户界面,后端使用SpringBoot提供RESTful API服务。这种架构模式实现了关注点分离,提高了系统的可维护性和扩展性。
前端技术栈详解
前端技术栈采用Vue 3.0组合式API,配合Vue Router实现路由管理,Axios处理HTTP请求。UI组件库选用Element Plus,为系统提供了统一的设计语言和交互体验。
技术亮点:
- Vue 3.0组合式API提供更好的逻辑复用和类型推导
- Element Plus组件库确保界面风格统一且现代化
- Webpack模块打包支持热重载开发,提升开发效率
// 前端API请求封装示例
import axios from 'axios'
import { ElMessage } from 'element-plus'
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 10000
})
// 请求拦截器 - 自动添加JWT令牌
service.interceptors.request.use(
config => {
const token = localStorage.getItem('token')
if (token) {
config.headers['Authorization'] = 'Bearer ' + token
}
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器 - 统一错误处理
service.interceptors.response.use(
response => {
const res = response.data
if (res.code !== 200) {
ElMessage.error(res.message || '请求失败')
return Promise.reject(new Error(res.message || 'Error'))
}
return res
},
error => {
ElMessage.error(error.message || '网络异常')
return Promise.reject(error)
}
)
export default service
后端技术栈深度解析
后端技术栈基于SpringBoot 2.7.x,数据持久层使用MyBatis-Plus增强MyBatis功能,数据库连接池采用HikariCP。安全认证使用Spring Security配合JWT令牌机制。
架构优势:
- SpringBoot自动配置简化了传统Spring应用的繁琐配置
- MyBatis-Plus提供强大的CRUD操作和条件构造器
- HikariCP作为高性能连接池,确保数据库连接的高效管理
# application.yml 核心配置
spring:
datasource:
url: jdbc:mysql://www.csbishe.cn:3306/vue_zhongzhisys?useSSL=false&serverTimezone=Asia/Shanghai
username: vue_zhongzhisys
password: vue_zhongzhisys
hikari:
maximum-pool-size: 20
minimum-idle: 5
redis:
host: www.csbishe.cn
port: 6379
password: 1234
database: 0
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
server:
port: 8080
servlet:
context-path: /vue_zhongzhisys
mybatis-plus:
global-config:
db-config:
table-prefix: t_
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
数据库设计亮点
数据库设计采用关系型数据库MySQL,通过合理的表结构设计和索引优化,确保系统数据的一致性和查询性能。
权限管理模块设计
用户角色权限模型采用经典的三表结构:用户表、角色表、用户角色关联表。这种设计支持灵活的权限分配和角色管理。
-- 角色管理表
CREATE TABLE `t_role` (
`role_id` int(11) NOT NULL AUTO_INCREMENT,
`role_name` varchar(50) DEFAULT NULL COMMENT '角色名称',
`role_desc` varchar(100) DEFAULT NULL COMMENT '角色描述',
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='角色管理'
-- 用户角色关联表
CREATE TABLE `t_user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL COMMENT '用户ID',
`role_id` int(11) DEFAULT NULL COMMENT '角色ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户角色关联表'
设计亮点:
- 使用自增主键提高插入性能
- 角色名称字段长度限制为50字符,避免数据冗余
- 关联表使用复合索引优化多表连接查询
- 字符集采用utf8mb4支持全字符集存储
水果种植管理模块设计
水果管理涉及多个实体间的复杂关系,通过外键约束确保数据完整性。
CREATE TABLE `t_fruittype` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL COMMENT '类型',
`bz` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='水果类型管理'
CREATE TABLE `t_fruit` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL COMMENT '水果名称',
`dksize` varchar(255) DEFAULT NULL COMMENT '地块大小',
`fzr` varchar(255) DEFAULT NULL COMMENT '负责人姓名',
`tel` varchar(255) DEFAULT NULL COMMENT '负责人电话',
`count` double DEFAULT NULL COMMENT '水果存量(kg)',
`info` varchar(255) DEFAULT NULL COMMENT '简介',
`fruitType_id` int(11) DEFAULT NULL COMMENT '水果类型',
`location_id` int(11) DEFAULT NULL COMMENT '种植地块',
PRIMARY KEY (`id`),
KEY `FK3234328439908808766` (`fruitType_id`),
KEY `FK8261771316999636604` (`location_id`),
CONSTRAINT `FK3234328439908808766` FOREIGN KEY (`fruitType_id`) REFERENCES `t_fruittype` (`id`),
CONSTRAINT `FK8261771316999636604` FOREIGN KEY (`location_id`) REFERENCES `t_location` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='水果管理'
设计优化点:
- 使用double类型存储存量数据,支持小数精度
- 建立外键索引优化关联查询性能
- 电话号码字段采用varchar类型,支持格式灵活性
- 通过外键约束确保类型和地块数据的引用完整性

核心功能实现
肥料采购管理模块
肥料采购模块实现了从采购计划到入库管理的完整业务流程。前端采用表格和表单结合的方式展示数据,支持条件查询和分页显示。
@RestController
@RequestMapping("/feiBuy")
public class FeiBuyController {
@Resource
FeiBuyService feiBuyService;
@RequestMapping("/list")
public Result list(FeiBuy feiBuy,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize){
// 创建分页对象
Page<FeiBuy> pagination = new Page<>(pageNo, pageSize);
MPJLambdaWrapper<FeiBuy> wrapper = new MPJLambdaWrapper<FeiBuy>()
.selectAll(FeiBuy.class)
.selectAssociation(Fei.class, FeiBuy::getFei)