💬 修改用户相关变量

This commit is contained in:
bunny 2025-07-13 21:56:56 +08:00
parent 7c49dc4b86
commit b799b81efc
5 changed files with 48 additions and 33 deletions

View File

@ -1,6 +1,6 @@
package com.spring.step2.domain.entity; package com.spring.step2.domain.entity;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter; import lombok.Getter;
@ -24,7 +24,7 @@ public class UserEntity extends BaseEntity {
private String email; private String email;
@Schema(name = "isDeleted", title = "是否被删除") @Schema(name = "isDeleted", title = "是否被删除")
@TableLogic @TableField(exist = false)
private Boolean isDeleted; private Boolean isDeleted;
} }

View File

@ -1,5 +1,6 @@
package com.spring.step2.domain.entity; package com.spring.step2.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter; import lombok.Getter;
@ -20,6 +21,7 @@ public class UserRoleEntity extends BaseEntity {
private Long userId; private Long userId;
@Schema(name = "isDeleted", title = "是否删除0-未删除1-已删除") @Schema(name = "isDeleted", title = "是否删除0-未删除1-已删除")
@TableField(exist = false)
private Boolean isDeleted; private Boolean isDeleted;
} }

View File

@ -1,5 +1,8 @@
package com.spring.step2.domain.vo; package com.spring.step2.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -14,6 +17,8 @@ import java.time.LocalDateTime;
public class UserVo { public class UserVo {
@Schema(name = "id", title = "主键") @Schema(name = "id", title = "主键")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@JsonSerialize(using = ToStringSerializer.class)
private Long id; private Long id;
@Schema(name = "username", title = "用户名") @Schema(name = "username", title = "用户名")

View File

@ -15,28 +15,27 @@ const DialogUser = defineComponent({
<form @submit.prevent="onSubmit"> <form @submit.prevent="onSubmit">
<!-- 内容 --> <!-- 内容 -->
<div class="modal-body"> <div class="modal-body">
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="dialogUsername"><i class="fas fa-user me-1"></i></label> <label class="form-label" for="dialogUsername"><i class="fas fa-user me-1"></i></label>
<input autocomplete="false" class="form-control" id="dialogUsername" placeholder="请输入用户名" <input autocomplete="false" class="form-control" id="dialogUsername" placeholder="请输入用户名"
type="text" v-model="userinfo.username" required> type="text" v-model="form.username" required>
<div class="form-text">在这里输入你的用户名</div> <div class="form-text">在这里输入你的用户名</div>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="dialogPassword"><i class="fas fa-lock me-1"></i></label> <label class="form-label" for="dialogPassword"><i class="fas fa-lock me-1"></i></label>
<input autocomplete="false" class="form-control" id="dialogPassword" placeholder="请输入密码" <input autocomplete="false" class="form-control" id="dialogPassword" placeholder="请输入密码"
type="password" v-model="userinfo.password"> type="password" v-model="form.password">
<div class="form-text">如果不修改或添加不填写此项</div> <div class="form-text">如果不修改或添加不填写此项</div>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="dialogEmail"><i class="fas fa-envelope me-1"></i></label> <label class="form-label" for="dialogEmail"><i class="fas fa-envelope me-1"></i></label>
<input autocomplete="false" class="form-control" id="dialogEmail" placeholder="请输入邮箱" <input autocomplete="false" class="form-control" id="dialogEmail" placeholder="请输入邮箱"
type="email" v-model="userinfo.email" required> type="email" v-model="form.email" required>
<div class="form-text">在这里输入你的邮箱</div> <div class="form-text">在这里输入你的邮箱</div>
</div> </div>
</div> </div>
<!-- 底部 --> <!-- 底部 -->
@ -59,15 +58,16 @@ const DialogUser = defineComponent({
}, },
data() { data() {
return { return {
modalInstance: ref(null) modalInstance: ref(null),
form: ref({}),
} }
}, },
methods: { methods: {
async onSubmit() { async onSubmit() {
// 是否添加表单 // 是否添加表单
const {code, message} = this.isAdd ? const {code, message} = this.isAdd ?
await axiosInstance.post("/user", this.userinfo) : await axiosInstance.post("/user", this.form) :
await axiosInstance.put("/user", this.userinfo); await axiosInstance.put("/user", this.form);
if (code === 200) { if (code === 200) {
antd.message.success(message); antd.message.success(message);
@ -77,6 +77,12 @@ const DialogUser = defineComponent({
} }
} }
}, },
watch: {
userinfo(val) {
// 创建深拷贝,而不是直接赋值
this.form = JSON.parse(JSON.stringify(val));
},
},
mounted() { mounted() {
// 初始化模态框实例 // 初始化模态框实例
const modalEl = this.$refs.modalRef; const modalEl = this.$refs.modalRef;

View File

@ -7,7 +7,7 @@
<link rel="stylesheet" th:href="@{/webjars/bootstrap/5.1.3/css/bootstrap.min.css}"> <link rel="stylesheet" th:href="@{/webjars/bootstrap/5.1.3/css/bootstrap.min.css}">
<!-- Font Awesome --> <!-- Font Awesome -->
<link rel="stylesheet" th:href="@{/webjars/font-awesome/5.15.4/css/all.min.css}"> <link rel="stylesheet" th:href="@{/webjars/font-awesome/5.15.4/css/all.min.css}">
<link rel="stylesheet" th:href="@{/src/lib/css/user/style.css}"> <link rel="stylesheet" th:href="@{/src/lib/css/tablePage.css}">
<!-- Vue3 --> <!-- Vue3 -->
<script th:src="@{/src/lib/js/vue/vue.global.js}"></script> <script th:src="@{/src/lib/js/vue/vue.global.js}"></script>
<!-- Bootstrap JS Bundle with Popper --> <!-- Bootstrap JS Bundle with Popper -->
@ -89,7 +89,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr :key="user.id" v-for="(user,index) in userList"> <tr :key="user.id" v-for="(user,index) in dataList">
<th scope="row">{{index + 1}}</th> <th scope="row">{{index + 1}}</th>
<td>{{user.username}}</td> <td>{{user.username}}</td>
<td>{{user.email}}</td> <td>{{user.email}}</td>
@ -145,7 +145,7 @@
// 弹窗标题 // 弹窗标题
dialogFormFlag: ref(false), dialogFormFlag: ref(false),
// 查询用户列表 // 查询用户列表
userList: ref([]) dataList: ref([])
}; };
}, },
computed: {}, computed: {},
@ -159,10 +159,10 @@
async onSearch() { async onSearch() {
const {pageNo, pageSize} = this.searchForm; const {pageNo, pageSize} = this.searchForm;
// 查询数据 // 查询数据
const {data} = await axiosInstance.get(`/user/${pageNo}/${pageSize}`, {params: this.form}) const {data} = await axiosInstance.get(`/user/${pageNo}/${pageSize}`, {params: this.searchForm})
// 赋值数据 // 赋值数据
this.userList = data.list; this.dataList = data.list;
// 设置分页内容 // 设置分页内容
this.searchForm.pageNo = data.pageNo; this.searchForm.pageNo = data.pageNo;
@ -197,8 +197,10 @@
// 删除用户 // 删除用户
const {code, message} = await axiosInstance.delete(`/user`, {data: [user.id]}); const {code, message} = await axiosInstance.delete(`/user`, {data: [user.id]});
if (code === 200) { if (code === 200) {
antd.message.success(message); this.onSearch();
} }
antd.message.success(message);
}, },
}, },
mounted() { mounted() {