<template>
<div class="login-container">
<el-card class="box-card">
<div class="login-body">
<div class="login-title" @click="toIndex">
<img src="@/assets/03.png" style="
width: 40px;
height: 40px;
margin: 5px 5px -5px 0;
-webkit-user-drag: none;
-khtml-user-drag: none;
-moz-user-drag: none;
user-drag: none;
" />
<b style="color: black;display: inline-block; margin-bottom: 20px;font-size: 28px;">
区块链数据溯源平台
</b>
</div>
<el-form ref="form" :model="userForm" :rules="rules" label-width="0px">
<!-- 手机号输入框 -->
<el-input
placeholder="请输入手机号码..."
v-model="userForm.accountNumber"
class="login-input"
maxlength="11"
>
<template slot="prepend">
<div class="iconfont icon-r-user2" style="font-size: 24px;"></div>
</template>
</el-input>
<!-- 密码输入框:参数名改为password,与后端匹配 -->
<el-input
placeholder="请输入密码..."
v-model="userForm.password" <!-- 从userPassword改为password -->
class="login-input"
@keyup.enter.native="login"
show-password
>
<template slot="prepend">
<div class="iconfont icon-r-lock" style="font-size: 24px;"></div>
</template>
</el-input>
<div class="login-submit">
<el-button type="primary" @click="login"> 登录</el-button>
<el-button type="warning" autocomplete="off" @click="$router.push('/sign-in')"
style="margin-left: 20px"> 注册</el-button>
</div>
<div class="other-submit">
<router-link to="/login-admin" class="sign-in-text"> 管理员登录</router-link>
</div>
</el-form>
</div>
</el-card>
</div>
</template>
<script>
export default {
name: "login",
data() {
return {
// 表单数据:密码参数名从userPassword改为password
userForm: {
accountNumber: '',
password: '' // 与后端接口参数名一致
},
// 简单表单验证(可选,增强用户体验)
rules: {
accountNumber: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, message: '密码长度不能少于6位', trigger: 'blur' }
]
}
};
},
methods: {
async login() {
// 先验证表单(可选)
this.$refs.form.validate(async (valid) => {
if (!valid) return;
try {
// 调用登录接口:参数名与后端匹配(accountNumber和password)
const res = await this.$api.userLogin({
accountNumber: this.userForm.accountNumber,
password: this.userForm.password // 传递正确的参数名
});
console.log("登录响应:", res);
// 后端Result类中成功的code是200,而非status_code
if (res.code == 200) { // 修正判断条件
// 处理登录时间(如果需要)
if (res.data && res.data.signInTime) {
res.data.signInTime = res.data.signInTime.substring(0, 10);
}
// 保存用户信息到全局
this.$globalData.userInfo = res.data;
// 跳转到首页
this.$router.replace('/index');
} else {
// 后端返回错误信息(如账号密码错误)
this.$message.error(res.msg || "登录失败");
}
} catch (e) {
console.error("登录请求失败:", e);
// 网络错误或服务器异常处理
this.$message.error("服务器异常,请稍后重试");
}
});
},
toIndex() {
this.$router.replace({ path: '/index' });
}
}
}
</script>
<style scoped>
/* 样式保持不变 */
.login-container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
width: 100%;
position: fixed;
top: 0;
left: 0;
width: 100%;
overflow-y: auto;
height: 100%;
background: url("../../assets/background.jpg") center top / cover no-repeat;
}
.login-body {
padding: 30px;
width: 300px;
height: 100%;
}
.login-title {
padding-bottom: 30px;
text-align: center;
font-weight: 600;
font-size: 20px;
color: #409EFF;
cursor: pointer;
}
.login-input {
margin-bottom: 20px;
}
.login-submit {
margin-top: 20px;
display: flex;
justify-content: center;
}
.sign-in-container {
padding: 0 10px;
}
.sign-in-text {
color: #409EFF;
font-size: 16px;
text-decoration: none;
line-height: 28px;
}
.other-submit {
display: flex;
justify-content: space-between;
margin-top: 30px;
margin-left: 200px;
}
</style> package com.flea.fleabackend.controller;
import com.flea.fleabackend.entity.ShUser;
import com.flea.fleabackend.service.IShUserService;
import com.flea.fleabackend.util.Result;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import org.springframework.validation.BindingResult;
// 控制器根路径改为 "/user"(与前端请求的 "/user/sign-in" 匹配)
@RestController
@RequestMapping("/user")
public class ShUserController {
private final IShUserService userService;
public ShUserController(IShUserService userService) {
this.userService = userService;
}
// 注册接口:路径改为 "/sign-in"(与前端url完全一致)
@PostMapping("/sign-in")
public Result<?> userRegister(
@Valid @RequestBody ShUser user,
BindingResult bindingResult
) {
// 参数校验失败的反馈
if (bindingResult.hasErrors()) {
String errorMsg = bindingResult.getFieldError().getDefaultMessage();
return Result.error("注册失败:" + errorMsg);
}
// 执行注册逻辑
boolean success = userService.userRegister(user);
return success ? Result.success("注册成功") : Result.error("账号已存在或注册信息不完整");
}
// 登录接口:同步匹配前端的 "/user/login" 请求
@GetMapping("/login")
public Result<?> userLogin(
@RequestParam String accountNumber,
@RequestParam String userPassword // 参数名从userPassword改为password
) {
// 服务层调用时使用修改后的参数名password
ShUser user = userService.userLogin(accountNumber, userPassword);
return user != null ? Result.success(user, "登录成功") : Result.error("账号或密码错误");
}
// 其他接口(如getUserInfo)也需同步调整路径,例如:
@GetMapping("/info")
public Result<?> getUserInfo(@RequestParam Long id) {
ShUser user = userService.getUserById(id);
return user != null ? Result.success(user) : Result.error("查询用户信息失败");
}
} package com.flea.fleabackend.entity;
import lombok.Data;
import java.time.LocalDateTime;
import jakarta.validation.constraints.NotBlank;
@Data
public class ShUser {
private Long id;
// 对应前端的“账号”输入框(字段名:accountNumber)
@NotBlank(message = "账号(手机号)不能为空")
// @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
private String accountNumber;
// 对应前端的“密码”输入框(字段名:userPassword)
@NotBlank(message = "密码不能为空")
// @Pattern(regexp = "^[a-zA-Z0-9]{6,16}$", message = "密码需为6-16位数字或字母")
private String userPassword;
// 对应前端的“昵称”输入框(字段名:nickname)
@NotBlank(message = "昵称不能为空")
private String nickname;
private String avatar;
private LocalDateTime signInTime;
private Integer userStatus;
} package com.flea.fleabackend.mapper;
import com.flea.fleabackend.entity.ShUser;
import org.apache.ibatis.annotations.*;
@Mapper
public interface ShUserMapper {
// 根据账号(手机号)查询用户
@Select("SELECT * FROM sh_user WHERE account_number = #{accountNumber}")
ShUser selectByAccountNumber(String accountNumber);
// 根据id查询用户
@Select("SELECT * FROM sh_user WHERE id = #{id}")
ShUser selectById(Long id);
// 注册用户(修复密码参数映射)
@Insert("INSERT INTO sh_user(" +
"account_number, " +
"user_password, " + // 数据库字段
"nickname, " +
"avatar, " +
"sign_in_time, " +
"user_status" +
") VALUES(" +
"#{accountNumber}, " +
"#{userPassword}, " + // 匹配实体类字段userPassword
"#{nickname}, " +
"#{avatar}, " +
"#{signInTime}, " +
"0" +
")")
@Options(useGeneratedKeys = true, keyProperty = "id") // 获取自增ID
int insert(ShUser user);
// 更新用户信息
@Update("UPDATE sh_user SET nickname = #{nickname}, avatar = #{avatar} WHERE id = #{id}")
int updateInfo(ShUser user);
// 封禁用户
@Update("UPDATE sh_user SET user_status = 1 WHERE id = #{id}")
int banUser(Long id);
} package com.flea.fleabackend.service.impl;
import com.flea.fleabackend.entity.ShUser;
import com.flea.fleabackend.mapper.ShUserMapper;
import com.flea.fleabackend.service.IShUserService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
/**
* 用户服务实现类:解决账密错误、空指针问题
*/
@Service
public class ShUserServiceImpl implements IShUserService {
private final ShUserMapper shUserMapper;
// 构造函数注入(Spring推荐方式)
public ShUserServiceImpl(ShUserMapper shUserMapper) {
this.shUserMapper = shUserMapper;
}
/**
* 登录逻辑优化:
* 1. 严格参数校验(避免空值/空字符串)
* 2. 适配数据库明文密码验证
* 3. 完善空值判断,避免空指针
*/
@Override
public ShUser userLogin(String accountNumber, String password) {
// 1. 严格校验入参(空值/空字符串都拒绝)
if (!StringUtils.hasText(accountNumber) || !StringUtils.hasText(password)) {
return null; // 入参无效,直接返回null(对应账密错误)
}
// 2. 根据账号查询用户(确保Mapper的SQL字段正确)
ShUser user = shUserMapper.selectByAccountNumber(accountNumber.trim()); // trim去除空格
// 3. 密码验证(多层空值判断,适配明文密码)
if (user == null) {
return null; // 账号不存在
}
if (!StringUtils.hasText(user.getUserPassword())) {
return null; // 数据库中密码为空,验证失败
}
// 明文密码对比(与数据库存储一致)
if (password.trim().equals(user.getUserPassword().trim())) {
// 4. 额外校验用户状态(0=正常,1=封禁)
if (user.getUserStatus() == 1) {
return null; // 账号被封禁,返回null
}
return user; // 登录成功
}
return null; // 密码错误
}
@Override
public boolean userRegister(ShUser user) {
// 注册参数校验
if (user == null || !StringUtils.hasText(user.getAccountNumber())
|| !StringUtils.hasText(user.getUserPassword())
|| !StringUtils.hasText(user.getNickname())) {
return false;
}
// 检查账号是否已存在
ShUser existingUser = shUserMapper.selectByAccountNumber(user.getAccountNumber().trim());
if (existingUser != null) {
return false; // 账号已存在
}
// 注册时密码明文存储(与登录逻辑一致)
user.setAccountNumber(user.getAccountNumber().trim());
user.setUserPassword(user.getUserPassword().trim());
return shUserMapper.insert(user) > 0;
}
@Override
public ShUser getUserById(Long id) {
if (id == null) {
return null;
}
return shUserMapper.selectById(id);
}
@Override
public boolean updateUserInfo(ShUser user) {
if (user == null || user.getId() == null || !StringUtils.hasText(user.getNickname())) {
return false;
}
return shUserMapper.updateInfo(user) > 0;
}
@Override
public boolean banUser(Long userId) {
if (userId == null) {
return false;
}
return shUserMapper.banUser(userId) > 0;
}
} // filePath: com/flea/fleabackend/service/IShUserService.java
package com.flea.fleabackend.service;
import com.flea.fleabackend.entity.ShUser;
public interface IShUserService {
// 用户登录(手机号+密码)
ShUser userLogin(String accountNumber, String password);
// 用户注册(账号唯一性校验)
boolean userRegister(ShUser user);
// 根据ID查询用户
ShUser getUserById(Long id);
// 更新用户信息(昵称、头像)
boolean updateUserInfo(ShUser user);
// 封禁用户(管理员操作)
boolean banUser(Long userId);
} <?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">
<!-- namespace必须和ShUserMapper接口的全路径一致 -->
<mapper namespace="com.flea.fleabackend.mapper.ShUserMapper">
<!-- 通用结果集映射:解决数据库字段与实体类属性映射问题 -->
<resultMap id="ShUserResultMap" type="com.flea.fleabackend.entity.ShUser">
<id column="id" property="id"/>
<result column="account_number" property="accountNumber"/> <!-- 数据库字段→实体类属性 -->
<result column="user_password" property="userPassword"/>
<result column="nickname" property="nickname"/>
<result column="avatar" property="avatar"/>
<result column="sign_in_time" property="signInTime"/>
<result column="user_status" property="userStatus"/>
</resultMap>
<!-- 根据账号查询用户(登录核心SQL) -->
<select id="selectByAccountNumber" parameterType="String" resultMap="ShUserResultMap">
SELECT
id, account_number, user_password, nickname, avatar, sign_in_time, user_status
FROM sh_user
WHERE account_number = #{accountNumber} <!-- 与数据库字段一致 --> <!-- 假设有逻辑删除字段,没有则删除该条件 -->
</select>
<!-- 根据ID查询用户 -->
<select id="selectById" parameterType="Long" resultMap="ShUserResultMap">
SELECT
id, account_number, user_password, nickname, avatar, sign_in_time, user_status
FROM sh_user
WHERE id = #{id}
AND is_deleted = 0
</select>
<select id="selectByPage" parameterType="map" resultType="com.flea.fleabackend.entity.ShIdleItem">
SELECT * FROM sh_idle_item
WHERE status = 1 <!-- 1=已发布状态 -->
LIMIT #{offset}, #{size}
</select>
<select id="selectTotalCount" resultType="int">
SELECT COUNT(*) FROM sh_idle_item
WHERE status = 1
</select>
<select id="selectByLabel" parameterType="map" resultType="com.flea.fleabackend.entity.ShIdleItem">
SELECT * FROM sh_idle_item
WHERE status = 1
AND idle_label = #{idleLabel}
LIMIT #{offset}, #{size}
</select>
<select id="selectCountByLabel" parameterType="string" resultType="int">
SELECT COUNT(*) FROM sh_idle_item
WHERE status = 1
AND idle_label = #{idleLabel}
</select>
<!-- 新增用户(注册) -->
<insert id="insert" parameterType="com.flea.fleabackend.entity.ShUser">
INSERT INTO sh_user (
account_number, user_password, nickname, avatar, sign_in_time, user_status
) VALUES (
#{accountNumber}, #{userPassword}, #{nickname}, #{avatar}, #{signInTime}, #{userStatus}
)
</insert>
<!-- 更新用户信息 -->
<update id="updateInfo" parameterType="com.flea.fleabackend.entity.ShUser">
UPDATE sh_user
<set>
<if test="nickname != null and nickname != ''">nickname = #{nickname},</if>
<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
<if test="userStatus != null">user_status = #{userStatus}</if>
</set>
WHERE id = #{id}
AND is_deleted = 0
</update>
<!-- 封禁用户(修改状态) -->
<update id="banUser" parameterType="Long">
UPDATE sh_user
SET user_status = 1 <!-- 1=封禁状态 -->
WHERE id = #{userId}
AND is_deleted = 0
</update>
</mapper> server:
port: 80
spring:
# 数据库配置(修改为你的本地数据库信息)
datasource:
url: jdbc:mysql://localhost:3306/flea_market?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root # 你的MySQL用户名(默认root)
password: 123456 # 你的MySQL密码(自己设置的)
driver-class-name: com.mysql.cj.jdbc.Driver
# MyBatis-Plus配置(可选,优化体验)
mybatis-plus:
mapper-locations: classpath:mapper/*.xml # 若有XML映射文件,指定路径
type-aliases-package: com.flea.fleabackend.entity # 实体类别名包
configuration:
map-underscore-to-camel-case: true # 下划线转驼峰(如数据库字段user_name → 实体类userName)
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志(方便调试)
<?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>
<!-- Spring Boot父工程(统一管理版本) -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.10</version>
<relativePath/>
</parent>
<!-- 项目信息 -->
<groupId>com.flea</groupId>
<artifactId>flea-backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>flea-backend</name>
<description>Flea 二手交易平台后端</description>
<!-- 全局属性 -->
<properties>
<java.version>21</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 【关键】配置国内Maven镜像(阿里云),解决依赖下载失败问题 -->
<repositories>
<repository>
<id>aliyunmaven</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyunmaven</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<!-- 核心依赖 -->
<dependencies>
<!-- Web核心依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis整合依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 参数校验依赖(解决@Valid报错) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 构建配置 -->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project> CREATE DATABASE IF NOT EXISTS flea_market CHARACTER SET utf8 COLLATE utf8_general_ci;
USE flea_market;
DROP TABLE IF EXISTS `sh_address`;
CREATE TABLE `sh_address` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`consignee_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货人姓名',
`consignee_phone` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货人手机号',
`province_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '省',
`city_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '市',
`region_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '区',
`detail_address` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '详细地址',
`default_flag` tinyint(0) NOT NULL COMMENT '是否默认地址',
`user_id` bigint(0) NOT NULL COMMENT '用户主键id',
PRIMARY KEY (`id`) USING BTREE,
INDEX `user_id_index`(`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of sh_address
-- ----------------------------
-- ----------------------------
-- Table structure for sh_admin
-- ----------------------------
DROP TABLE IF EXISTS `sh_admin`;
CREATE TABLE `sh_admin` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`account_number` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '管理员账号',
`admin_password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
`admin_name` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '管理员名字',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `account_number`(`account_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of sh_admin
-- ----------------------------
INSERT INTO `sh_admin` VALUES (1, 'admin', '123456', '管理员');
-- ----------------------------
-- Table structure for sh_favorite
-- ----------------------------
DROP TABLE IF EXISTS `sh_favorite`;
CREATE TABLE `sh_favorite` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键id',
`create_time` datetime NOT NULL COMMENT '加入收藏的时间',
`user_id` bigint(0) NOT NULL COMMENT '用户主键id',
`idle_id` bigint(0) NOT NULL COMMENT '物主键id',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `user_id`(`user_id`, `idle_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of sh_favorite
-- ----------------------------
INSERT INTO `sh_favorite` VALUES (48, '2023-12-09 12:32:39', 11, 113);
-- ----------------------------
-- Table structure for sh_idle_item
-- ----------------------------
DROP TABLE IF EXISTS `sh_idle_item`;
CREATE TABLE `sh_idle_item` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`idle_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '物名称',
`idle_details` varchar(2048) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '详情',
`picture_list` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '图集',
`idle_price` decimal(10, 2) NOT NULL COMMENT '价格',
`idle_place` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '发货地区',
`idle_label` int(0) NOT NULL COMMENT '分类标签',
`release_time` datetime NOT NULL COMMENT '发布时间',
`idle_status` tinyint(0) NOT NULL COMMENT '状态(发布1、下架2、删除0)',
`user_id` bigint(0) NOT NULL COMMENT '用户主键id',
PRIMARY KEY (`id`) USING BTREE,
INDEX `user_id_index`(`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 105 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
DROP TABLE IF EXISTS `sh_message`;
CREATE TABLE `sh_message` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_id` bigint(0) NOT NULL COMMENT '用户主键id',
`idle_id` bigint(0) NOT NULL COMMENT '主键id',
`content` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '留言内容',
`create_time` datetime NOT NULL COMMENT '留言时间',
`to_user` bigint(0) NOT NULL COMMENT '所回复的用户',
`to_message` bigint(0) NULL DEFAULT NULL COMMENT '所回复的留言',
PRIMARY KEY (`id`) USING BTREE,
INDEX `user_id_index`(`user_id`) USING BTREE,
INDEX `idle_id_index`(`idle_id`) USING BTREE,
INDEX `to_user_index`(`to_user`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of sh_message
-- ----------------------------
-- ----------------------------
-- Table structure for sh_order
-- ----------------------------
DROP TABLE IF EXISTS `sh_order`;
CREATE TABLE `sh_order` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`order_number` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '订单编号',
`user_id` bigint(0) NOT NULL COMMENT '用户主键id',
`idle_id` bigint(0) NOT NULL COMMENT '物品主键id',
`order_price` decimal(10, 2) NOT NULL COMMENT '订单总价',
`payment_status` tinyint(0) NOT NULL COMMENT '支付状态',
`payment_way` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '支付方式',
`create_time` datetime NOT NULL COMMENT '创建时间',
`payment_time` datetime NULL DEFAULT NULL COMMENT '支付时间',
`order_status` tinyint(0) NOT NULL COMMENT '订单状态',
`is_deleted` tinyint(0) NULL DEFAULT NULL COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 86 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of sh_order
-- ----------------------------
-- ----------------------------
-- Table structure for sh_order_address
-- ----------------------------
DROP TABLE IF EXISTS `sh_order_address`;
CREATE TABLE `sh_order_address` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`order_id` bigint(0) NOT NULL COMMENT '订单id',
`consignee_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货人',
`consignee_phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '电话',
`detail_address` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货地址',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `orderId`(`order_id`) USING BTREE,
INDEX `order_id_index`(`order_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of sh_order_address
-- ----------------------------
-- Table structure for sh_type
-- ----------------------------
DROP TABLE IF EXISTS `sh_type`;
CREATE TABLE `sh_type` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '分类名称',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '类别表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sh_type
-- ----------------------------
-- ----------------------------
-- Table structure for sh_user
-- ----------------------------
DROP TABLE IF EXISTS `sh_user`;
CREATE TABLE `sh_user` (
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`account_number` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '账号(手机号)',
`user_password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录密码',
`nickname` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '昵称',
`avatar` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '头像',
`sign_in_time` datetime NOT NULL COMMENT '注册时间',
`user_status` tinyint(0) NULL DEFAULT NULL COMMENT '状态(1代表封禁)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `account_number`(`account_number`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
根据代码帮我找出为什么平台登录成功后无法自动跳转至index页面的原因 并且展示修改后能解决报错的完整代码
最新发布