您好,登录后才能下订单哦!
随着城市化进程的加快,垃圾处理问题日益严重。垃圾分类作为一种有效的垃圾处理方式,逐渐被广泛推广。为了更好地管理和推广垃圾分类,开发一个垃圾分类管理系统显得尤为重要。本文将介绍如何使用SpringBoot和Vue.js技术栈来实现一个简单的垃圾分类管理系统。
用户管理模块
垃圾分类模块
数据统计模块
系统管理模块
使用Spring Initializr快速生成一个SpringBoot项目,添加以下依赖:
创建以下表结构:
用户表 (user)
垃圾分类表 (garbage_category)
垃圾分类记录表 (garbage_record)
@Entity
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
    private String email;
    private String role;
}
@Entity
@Data
public class GarbageCategory {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String category;
    private String description;
}
@Entity
@Data
public class GarbageRecord {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long userId;
    private Long garbageId;
    private LocalDate date;
}
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByUsername(String username);
}
public interface GarbageCategoryRepository extends JpaRepository<GarbageCategory, Long> {
    List<GarbageCategory> findByCategory(String category);
}
public interface GarbageRecordRepository extends JpaRepository<GarbageRecord, Long> {
    List<GarbageRecord> findByUserId(Long userId);
}
@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserRepository userRepository;
    @PostMapping("/register")
    public ResponseEntity<User> register(@RequestBody User user) {
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        User savedUser = userRepository.save(user);
        return ResponseEntity.ok(savedUser);
    }
    @PostMapping("/login")
    public ResponseEntity<String> login(@RequestBody User user) {
        // 实现登录逻辑
    }
}
@RestController
@RequestMapping("/api/garbage")
public class GarbageController {
    @Autowired
    private GarbageCategoryRepository garbageCategoryRepository;
    @GetMapping("/categories")
    public ResponseEntity<List<GarbageCategory>> getCategories(@RequestParam String category) {
        List<GarbageCategory> categories = garbageCategoryRepository.findByCategory(category);
        return ResponseEntity.ok(categories);
    }
}
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.garbage"))
                .paths(PathSelectors.any())
                .build();
    }
}
使用Vue CLI创建一个新的Vue项目:
vue create garbage-management-system
安装必要的依赖:
npm install axios vue-router vuex
import Vue from 'vue';
import Router from 'vue-router';
import Home from './views/Home.vue';
import Login from './views/Login.vue';
import Register from './views/Register.vue';
Vue.use(Router);
export default new Router({
  routes: [
    { path: '/', component: Home },
    { path: '/login', component: Login },
    { path: '/register', component: Register },
  ]
});
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
  state: {
    user: null,
    token: null
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
    },
    setToken(state, token) {
      state.token = token;
    }
  },
  actions: {
    login({ commit }, credentials) {
      // 实现登录逻辑
    },
    register({ commit }, user) {
      // 实现注册逻辑
    }
  }
});
<template>
  <div>
    <h1>垃圾分类管理系统</h1>
    <div v-if="user">
      <p>欢迎, {{ user.username }}</p>
      <button @click="logout">退出</button>
    </div>
    <div v-else>
      <router-link to="/login">登录</router-link>
      <router-link to="/register">注册</router-link>
    </div>
  </div>
</template>
<script>
export default {
  computed: {
    user() {
      return this.$store.state.user;
    }
  },
  methods: {
    logout() {
      this.$store.commit('setUser', null);
      this.$store.commit('setToken', null);
      this.$router.push('/login');
    }
  }
};
</script>
<template>
  <div>
    <h2>登录</h2>
    <form @submit.prevent="login">
      <input v-model="username" placeholder="用户名" />
      <input v-model="password" type="password" placeholder="密码" />
      <button type="submit">登录</button>
    </form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    };
  },
  methods: {
    login() {
      this.$store.dispatch('login', {
        username: this.username,
        password: this.password
      });
    }
  }
};
</script>
<template>
  <div>
    <h2>注册</h2>
    <form @submit.prevent="register">
      <input v-model="username" placeholder="用户名" />
      <input v-model="password" type="password" placeholder="密码" />
      <input v-model="email" placeholder="邮箱" />
      <button type="submit">注册</button>
    </form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      username: '',
      password: '',
      email: ''
    };
  },
  methods: {
    register() {
      this.$store.dispatch('register', {
        username: this.username,
        password: this.password,
        email: this.email
      });
    }
  }
};
</script>
在SpringBoot项目中配置跨域支持:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}
在Vue项目中封装axios请求:
import axios from 'axios';
const apiClient = axios.create({
  baseURL: 'http://localhost:8080/api',
  headers: {
    'Content-Type': 'application/json'
  }
});
export default {
  login(credentials) {
    return apiClient.post('/users/login', credentials);
  },
  register(user) {
    return apiClient.post('/users/register', user);
  },
  getCategories(category) {
    return apiClient.get(`/garbage/categories?category=${category}`);
  }
};
在Vuex的actions中调用API:
import api from '@/services/api';
export default {
  login({ commit }, credentials) {
    return api.login(credentials).then(response => {
      commit('setUser', response.data.user);
      commit('setToken', response.data.token);
    });
  },
  register({ commit }, user) {
    return api.register(user).then(response => {
      commit('setUser', response.data.user);
      commit('setToken', response.data.token);
    });
  }
};
本文介绍了如何使用SpringBoot和Vue.js技术栈实现一个简单的垃圾分类管理系统。通过前后端分离的架构设计,系统具备了良好的扩展性和维护性。未来可以在此基础上进一步扩展功能,如增加垃圾分类的智能识别、数据可视化等模块,以提升系统的实用性和用户体验。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。