提交 3d9c0f08 编写于 作者: Followers_'s avatar Followers_

Merge branch 'backend_hck' into 'master'

Backend hck

See merge request !1
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.nav</groupId>
<artifactId>backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>backend</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.nav;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BackendApplication {
public static void main(String[] args) {
SpringApplication.run(BackendApplication.class, args);
}
}
package com.nav.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//用户登录成功后,应该有自己的session
Object session = request.getSession().getAttribute("LoginUser");
if (session == null) {
request.setAttribute("msg", "权限不够,请先登录");
request.getRequestDispatcher("/index.html").forward(request, response);
return false;
} else {
return true;
}
}
}
package com.nav.config;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
public class MyMvcConfig implements WebMvcConfigurer {
//拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/index.html", "/", "/user/login", "/css/**", "/js/**", "/img/**","/add","/emps");
}
}
package com.nav.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userService;
@RequestMapping("/login")
@ResponseBody
public Map<String,Object> login(@RequestBody Map<String,String> user){
Map<String,Object> result=new HashMap<>();
String phone=user.get("phone");
String password=user.get("password");
User userInfo=userService.selectUserByPhone(phone,password);
if(user!=null) {
result.put("msg", "success");
result.put("name", user.getName());
result.put("phone", user.getPhone());
result.put("address", user.getAddress());
}
else{
result.put("msg", "failed");
}
return result;
}
@RequestMapping("register")
@ResponseBody
public Map<String,Object> register(@RequestBody Map<String,String> user){
Map<String,Object> result=new HashMap<>();
String phone=user.get("phone");
String password=user.get("password");
String name=user.get("name");
String address=user.get("address");
boolean record=userService.insertUser(phone,password,name,address);
if(!record){
result.put("message","failed");
}
return result;
}
}
package com.nav.dao;
import com.nav.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface UserDao {
public List<User> getUserList();
}
package com.nav.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Activity {
private long id;
private String first;
private String second;
private String third;
private int firstCount;
private int secondCount;
private int thirdCount;
private int limit;
private Date startTime;
private Date endTime;
private int state;
private long userId;
}
package com.nav.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin {
private String account;
private String password;
}
package com.nav.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Participant {
private long id;
private long userId;
private long activityId;
private int state;
}
package com.nav.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private long id; //主键,自增
private String phone; //手机号,主键
private String password; //密码
private String name; //姓名
private String address; //地址
private int state; //状态,0表示被封号 1表示正常
private String IP;
}
server:
port: 8088
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost/XXXX?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT
username: root
password: 123456
#����mapper��ӳ���ļ���λ��
mybatis:
mapper-locations: classpath:/mapper/*.xml
configuration:
map-underscore-to-camel-case: true
package com.nav;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class BackendApplicationTests {
@Test
void contextLoads() {
}
}
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# demo
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}
此差异已折叠。
{
"name": "frontend",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
},
"dependencies": {
"axios": "^0.25.0",
"core-js": "^3.6.5",
"element-ui": "^2.15.6",
"font-awesome": "^4.7.0",
"vue": "^2.6.11",
"vue-router": "^3.2.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"vue-template-compiler": "^2.6.11"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template>
<div id="app">
<router-view/>
</div>
</template>
<style>
html,body,#app{
height:100%;
padding:0;
margin:0;
}
</style>
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import 'font-awesome/css/font-awesome.css';
import axios from 'axios';
Vue.config.productionTip = false
Vue.use(ElementUI);
Vue.prototype.$axios = axios
new Vue({
router,
render: h => h(App)
}).$mount('#app')
import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '../views/Login/Login.vue'
import HomePage from '../views/MainPage/HomePage.vue'
import Activity from '../views/MainPage/activity/activity.vue'
import Post from '../views/MainPage/postactivity/post.vue'
import Message from '../views/MainPage/message/message.vue'
import Home from '../views/MainPage/home/home.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Login',
component: Login
},
{
path: '/homePage',
name: 'HomePage',
component: HomePage,
children:[
{
path: '/activity',
component: Activity,
},
{
path: '/post',
component: Post
},{
path: '/message',
component: Message
},{
path: '/home',
component: Home
},
]
}
]
const router = new VueRouter({
routes
})
export default router
import axios from 'axios'
import {
Message
} from 'element-ui';
import router from '../router'
axios.interceptors.response.use(success => {
if (success.status && success.status == 200) {
if (success.data.code == 500 || success.data.code == 401 || success.data.code == 403) {
Message.error({
message: success.data.message
});
return;
}
if (success.data.message) {
Message.success({
message: success.data.message
});
}
}
return success.data;
},
error => {
if(error.response.code==504||error.response.code==404){
Message.error({message:'找不到服务器'});
}
else if(error.response.code==403){
Message.error({message:'权限不足'});
}
else if(error.response.code== 401){
Message.error({message:'至少登录一下吧'});
router.replace('/');
}
else{
if(error.response.data.message){
Message.error({message:error.response.data.message});
}
else{
Message.error({message:'未知错误!'})
}
}
return;
})
export const postRequest =(url,params)=>{
return axios({
method:'post',
url:`${url}`,
data:params
})
}
\ No newline at end of file
<template>
<div class="container">
<div class="background">
<img :src="imgSrc" width="100%" height="100%" alt="" />
</div>
<div class="login">
<el-form :rules="rules" ref="form" :model="loginForm" class="loginStyle">
<h3 class="loginName">系统登录</h3>
<el-radio v-model="radio" label="1">用户</el-radio>
<el-radio v-model="radio" label="2">管理员</el-radio>
<el-form-item prop="username">
<el-input type="text" v-model="loginForm.username" placeholder="请输入用户名"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input type="password" v-model="loginForm.password" placeholder="请输入密码"></el-input>
</el-form-item>
<el-checkbox v-model="checked" class="loginRemember">记住密码</el-checkbox>
<el-button type="primary" style="width:100%" @click="submitLogin">登录</el-button>
</el-form>
</div>
</div>
</template>
<script>
export default {
name:"Login",
data(){
return{
imgSrc: require('../../assets/bg.jpeg'),
loginForm:{
username:"admin",
password:"123456"
},
checked:true,
rules:{
username:[{required:true,message:'请输入用户名',trigger:'blur'}],
password:[{required:true,message:'请输入密码',trigger:'blur'}],
},
radio: '1',
}
},
methods: {
submitLogin() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.$router.push('/homePage');
this.$axios.post('http://localhost:8081/login',this.loginForm).then(res => {
console.log(res);
if(res.data.code===200){
} else {
this.$message.error("用户名或密码错误");
}
})
} else {
this.$message.error("请输入必填项");
return false;
}
});
}
}
}
</script>
<style>
.background{
width:100%;
height:100%;
z-index:-1;
position: absolute;
}
.login{
z-index:1;
position:absolute;
border: 15px;
top:50%;
left:50%;
transform:translate(-50%,-50%);
background-clip: padding-box;
width: 350px;
padding: 15px 35px 15px 35px;
background: rgba(241, 241, 241, 0.8);
border: 1px solid #cac6c6;
box-shadow: 0px 15px 25px rgba(0,0,0,.5);
box-shadow: 0px 15px 25px #dbafd8;
box-shadow: 0px 15px 25px #dedfdf;
border-radius:15px;
}
.loginName {
margin: 0px auto 40px auto;
text-align: center;
}
.loginRemember {
margin: 0 0 5px;
}
</style>
<template>
<div>
<el-container>
<el-header style="border-bottom:1px solid #dedfdf;line-height:60px;text-align:right">
<el-dropdown>
<i class="el-icon-setting" style="margin-right: 15px"></i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>查看</el-dropdown-item>
<el-dropdown-item>新增</el-dropdown-item>
<el-dropdown-item>删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<span>王小虎</span>
</el-header>
<el-container>
<el-aside width="250px">
<el-menu router>
<el-menu-item index="/activity"><i class="el-icon-data-analysis" style="color:#dbafd8"></i>抽奖活动</el-menu-item>
<el-menu-item index="/post"><i class="el-icon-search" style="color:#dbafd8"></i>发布抽奖</el-menu-item>
<el-menu-item index="/message"><i class="el-icon-star-on" style="color:#dbafd8"></i>消息中心</el-menu-item>
<el-menu-item index="/home"><i class="el-icon-star-on" style="color:#dbafd8"></i>用户中心</el-menu-item>
<!-- <el-menu-item v-if="true" index="/home"><i class="el-icon-star-on" style="color:#dbafd8"></i>用户中心</el-menu-item> -->
<!-- <el-menu-item v-if="" index="/home"><i class="el-icon-star-on" style="color:#dbafd8"></i>用户中心</el-menu-item>
-->
</el-menu>
</el-aside>
<el-main>
<router-view />
</el-main>
</el-container>
</el-container>
</div>
</template>
<script>
export default {
name:"HomePage"
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<div class="container">
<div class="operation">
<el-input v-model="input" placeholder="请输入内容" style="width: 300px"></el-input>
<el-button type="primary" icon="el-icon-search" circle style="margin-left:10px" ></el-button>
</div>
<el-table :data="tableData" style="width: 100%"
:header-cell-style="headStyle"
:cell-style="rowStyle"
:header-cell-class-name="headerStyle">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
<el-table-column prop="email" label="邮箱"></el-table-column>
<el-table-column prop="address" label="操作" width="150" >
<template slot-scope="scope">
<el-button type="success" @click="handleClick(scope.row)" size="small">查看</el-button>
<el-button type="warning" size="small">收藏</el-button>
</template>
</el-table-column>
</el-table>
<div class="operation">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage4"
:page-sizes="[10,20]"
:page-size="10"
layout="total, sizes, prev, pager, next, jumper"
:total="50">
</el-pagination>
</div>
</div>
</template>
<script>
export default {
data() {
return {
input: '',
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
email:'123456@qq.com'
},
{
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄',
email:'123456@qq.com'
},
{
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄',
email:'123456@qq.com'
},
{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄',
email:'123456@qq.com'
}]
}
},
methods: {
headerStyle ({row, column, rowIndex, columnIndex}) {
return 'tableStyle'
},
headStyle(){
return "text-align:center"
},
rowStyle(){
return "text-align:center"
}
}
}
</script>
<style>
.container{
margin:0 50px auto;
}
.tableStyle{
background-color: #2ebdffee!important;
font-weight:400;
}
.operation{
margin:10px auto;
text-align: center;
}
</style>
\ No newline at end of file
<template>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
<template>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
<template>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册