From 22f3764fcabc263df5cb7bbe89612efda4d6bc22 Mon Sep 17 00:00:00 2001 From: riverflow <3011499946@qq.com> Date: Thu, 14 Aug 2025 10:23:47 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=8E=E7=AB=AFpost?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E9=80=BB=E8=BE=91=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E5=92=8C=E6=89=8B=E6=9C=BA=E5=8F=B7=E5=88=86=E5=BC=80?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E6=A3=80=E6=9F=A5=EF=BC=8C=E7=BB=86=E5=88=86?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E9=80=BB=E8=BE=91=20=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=9B=B4=E6=B8=85=E6=99=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/controller/SysUserController.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java index 4d1078f..b450c25 100644 --- a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java @@ -22,18 +22,25 @@ public class SysUserController { // 新增用户 @PostMapping//使用post请求 - public ResultVo addUser(@RequestBody SysUser sysUser){ -// 判断用户是否重复 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().eq(SysUser::getUsername,sysUser.getUsername()).eq(SysUser::getPhone,sysUser.getPhone()); - SysUser user = sysUserService.getOne(queryWrapper); - if(user != null){ - return ResultUtils.error("用户已存在!或该手机号已被使用!"); + public ResultVo addUser(@RequestBody SysUser sysUser) { + // 1. 单独检查用户名 + if (sysUserService.lambdaQuery() + .eq(SysUser::getUsername, sysUser.getUsername()) + .exists()) { + return ResultUtils.error("用户名已存在!"); } - if(sysUserService.save(sysUser)){ - return ResultUtils.success("新增用户成功!"); + + // 2. 单独检查手机号 + if (sysUserService.lambdaQuery() + .eq(SysUser::getPhone, sysUser.getPhone()) + .exists()) { + return ResultUtils.error("手机号已被使用!"); } - return ResultUtils.error("新增用户失败!"); + + // 3. 保存用户 + return sysUserService.save(sysUser) + ? ResultUtils.success("新增用户成功!") + : ResultUtils.error("新增用户失败!"); } // 编辑用户 From e64a7740c9193c3fd241cf35897fd692481b56d3 Mon Sep 17 00:00:00 2001 From: riverflow <3011499946@qq.com> Date: Thu, 14 Aug 2025 12:33:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=9C=A8api/user/index.ts=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8B=E6=B7=BB=E5=8A=A0=E5=88=97=E8=A1=A8=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=A2=9E=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在api/user/userModel.ts文件下为ListUserParm(列表查询)增加属性类型total, 用来记录分页总条数 在views/user/Index.vue文件下通过Element-plus创建用户列表、分页显示模块 在compositions/user/useUserTable.ts文件中调用getListApi, 实现与后端接口对接,并用tableList存储列表返回到用户列表 添加一系列用户列表、分页显示模块需要的属性及方法 在main.ts文件中全局配置Element-plus国际化,显示中文 --- .../main/java/com/itmk/utils/ResultVo.java | 2 +- .../user/controller/SysUserController.java | 2 +- order-system/src/api/user/index.ts | 7 ++- order-system/src/api/user/userModel.ts | 1 + .../src/compositions/user/useUserTable.ts | 57 ++++++++++++++++--- order-system/src/http/index.ts | 47 ++++++++------- order-system/src/main.ts | 8 ++- order-system/src/views/user/AddUser.vue | 1 + order-system/src/views/user/Index.vue | 52 ++++++++++++++++- order-system/src/vite-env.d.ts | 1 + 10 files changed, 143 insertions(+), 35 deletions(-) diff --git a/api-interface/itmk-base-parent/itmk-base-common/src/main/java/com/itmk/utils/ResultVo.java b/api-interface/itmk-base-parent/itmk-base-common/src/main/java/com/itmk/utils/ResultVo.java index 3b6ef98..9b40441 100644 --- a/api-interface/itmk-base-parent/itmk-base-common/src/main/java/com/itmk/utils/ResultVo.java +++ b/api-interface/itmk-base-parent/itmk-base-common/src/main/java/com/itmk/utils/ResultVo.java @@ -11,5 +11,5 @@ import lombok.Data; public class ResultVo { private String msg; private int code; - private T date; + private T data; } diff --git a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java index b450c25..7723513 100644 --- a/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java +++ b/api-interface/itmk-base-parent/itmk-base-web/src/main/java/com/itmk/web/user/controller/SysUserController.java @@ -39,7 +39,7 @@ public class SysUserController { // 3. 保存用户 return sysUserService.save(sysUser) - ? ResultUtils.success("新增用户成功!") + ? ResultUtils.success("新增用户成功!", sysUser) : ResultUtils.error("新增用户失败!"); } diff --git a/order-system/src/api/user/index.ts b/order-system/src/api/user/index.ts index 922aab3..9e17d85 100644 --- a/order-system/src/api/user/index.ts +++ b/order-system/src/api/user/index.ts @@ -1,7 +1,12 @@ import http from "../../http"; -import type { UserModel } from "./userModel"; +import type { ListUserParm, UserModel } from "./userModel"; // 新增接口 export const addUserApi = (parm:UserModel)=>{ return http.post("/api/user", parm) +} + +// 列表查询 +export const getListApi = (parm:ListUserParm)=>{ + return http.get("api/user/list", parm) } \ No newline at end of file diff --git a/order-system/src/api/user/userModel.ts b/order-system/src/api/user/userModel.ts index fdd90af..2dcd75d 100644 --- a/order-system/src/api/user/userModel.ts +++ b/order-system/src/api/user/userModel.ts @@ -4,6 +4,7 @@ export type ListUserParm = { pageSize: number; name: string; phone: string; + total: number; //分页总条数 } // 定义表单数据类型 diff --git a/order-system/src/compositions/user/useUserTable.ts b/order-system/src/compositions/user/useUserTable.ts index cdc9ae5..9749714 100644 --- a/order-system/src/compositions/user/useUserTable.ts +++ b/order-system/src/compositions/user/useUserTable.ts @@ -1,7 +1,13 @@ // 抽离表格相关业务 import type { ListUserParm } from "@/api/user/userModel"; -import { ref, reactive } from "vue"; +import { ref, reactive, onMounted, nextTick } from "vue"; + +// 引入列表查询api +import { getListApi } from "../../api/user/index"; + +// 设置表格高度(默认值设置为0) +const tableHeight = ref(0) export default function useUserTable() { // 列表查询的参数 @@ -9,33 +15,66 @@ export default function useUserTable() { currentPage: 1, pageSize: 10, name: '', - phone: '' - + phone: '', + total: 0 }) - + // 定义tableList用来接收列表数据 + const tableList = ref([]) // 列表 - const getList = () => { - + const getList = async () => { + // 在getList方法中调用getListApi + let res = await getListApi(listParm) + console.log(res) + if (res && res.code == 200) { + tableList.value = res.data.records; + listParm.total = res.data.total; + } } // 获取show方法 - const tableShowBtn = ref<{show:(title: string)=>void}>() + const tableShowBtn = ref<{ show: (title: string) => void }>() // 搜索按钮 const searchBtn = () => { - + } // 重置按钮 const resetBtn = () => { tableShowBtn.value?.show("重置") } + + // 在组件挂载时加载数据 + onMounted(() => { + getList() + + // 计算表格高度覆盖默认值 + nextTick(()=>{ + tableHeight.value = window.innerHeight - 220 + }) + }) + + // 定义页容量改变方法 + const sizeChange = (size: number) => { + listParm.pageSize = size + getList() + } + + // 定义当前页数改变方法 + const currentChange = (page: number) => { + listParm.currentPage = page + getList() + } // 将表格查询的方法返回出去 return { tableShowBtn, listParm, getList, searchBtn, - resetBtn + resetBtn, + tableList, + sizeChange, + currentChange, + tableHeight } } \ No newline at end of file diff --git a/order-system/src/http/index.ts b/order-system/src/http/index.ts index 4c231c1..c17c1af 100644 --- a/order-system/src/http/index.ts +++ b/order-system/src/http/index.ts @@ -5,15 +5,22 @@ import { ElMessage } from 'element-plus' // axios请求配置 const config = { // baseURL:'http://localhost:8089', - baseURL:'/api', + baseURL: '/api', - timeout:10000, + timeout: 10000, } -class Http{ +// 返回值数据类型 +export interface Result { + code: number; + msg: string; + data: T; +} + +class Http { private instance: AxiosInstance; // 初始化axios - constructor(config: AxiosRequestConfig){ + constructor(config: AxiosRequestConfig) { // 实例化,通过create方法创建axios实例 this.instance = axios.create(config) @@ -23,16 +30,16 @@ class Http{ // 拦截器 - private interceptors(){ + private interceptors() { // 请求发送之前的拦截器,通常用来配置、携带token - this.instance.interceptors.request.use((config: InternalAxiosRequestConfig)=>{ + this.instance.interceptors.request.use((config: InternalAxiosRequestConfig) => { // 设置token到请求头部 let token = ""; - if(token){ + if (token) { config.headers!['token'] = token; } return config; - }, (error: any) =>{ + }, (error: any) => { error.data = {} error.data.msg = '服务器异常,请联系管理员!' return error; @@ -41,18 +48,18 @@ class Http{ // 请求返回之后的拦截器 this.instance.interceptors.response.use((res: AxiosResponse) => { // 如果返回状态码不为200,说明返回错误 - if(res.data.code != 200){ + if (res.data.code != 200) { // 如果msg不存在,返回“服务器出错!” ElMessage.error(res.data.msg || '服务器出错!') return Promise.reject(res.data.msg || '服务器出错!') - }else{ + } else { return res.data } - },(error) => { + }, (error) => { console.log('进入错误') error.data = {} - if(error && error.response) { - switch(error.response.status){ + if (error && error.response) { + switch (error.response.status) { case 400: error.data.msg = '错误请求' ElMessage.error(error.data.msg) @@ -114,22 +121,22 @@ class Http{ } // get请求 - get(url:string,params?:object): Promise{ - return this.instance.get(url,{params}) + get (url: string, params?: object): Promise { + return this.instance.get(url, { params }) } // post请求 - post(url:string,data?:object): Promise{ - return this.instance.post(url,data) + post (url: string, data?: object): Promise { + return this.instance.post(url, data) } // put请求 - put(url:string,data?:object): Promise{ - return this.instance.put(url,data) + put (url: string, data?: object): Promise { + return this.instance.put(url, data) } // delete请求 - delete(url:string): Promise{ + delete (url: string): Promise { return this.instance.delete(url) } } diff --git a/order-system/src/main.ts b/order-system/src/main.ts index ddbfceb..992e427 100644 --- a/order-system/src/main.ts +++ b/order-system/src/main.ts @@ -2,6 +2,9 @@ import { createApp } from 'vue' import { createPinia } from 'pinia'//创建一个 pinia 实例 (根 store) 并将其传递给应用 // import './style.css' 将默认样式注释掉,避免影响后续开发 +// 引入Element-plus的国际化设置 +import zhCn from 'element-plus/es/locale/lang/zh-cn' + import router from './router' //将创建好的路由引入到main.ts中 import App from './App.vue' @@ -16,8 +19,11 @@ const pinia = createPinia() // 挂载路由 // 导入组件 // 导入pinia +// 配置国际化 const app = createApp(App) -app.use(router).use(ElementPlus).use(pinia).mount('#app'); +app.use(router).use(ElementPlus, { + locale: zhCn, +}).use(pinia).mount('#app'); // 全局注册图标组件 for (const [key, component] of Object.entries(ElementPlusIconsVue)) { diff --git a/order-system/src/views/user/AddUser.vue b/order-system/src/views/user/AddUser.vue index 708b41e..0fc02e4 100644 --- a/order-system/src/views/user/AddUser.vue +++ b/order-system/src/views/user/AddUser.vue @@ -145,6 +145,7 @@ const commit = () => { if(valid){ // 调用addUserApi,将前端表单收集到的数据提交给数据库 let res = await addUserApi(addModel) + console.log(res) if(res && res.code == 200){ onConfirm() } diff --git a/order-system/src/views/user/Index.vue b/order-system/src/views/user/Index.vue index 48e6b30..dab69d9 100644 --- a/order-system/src/views/user/Index.vue +++ b/order-system/src/views/user/Index.vue @@ -16,6 +16,38 @@ + + + + + + + + + + + + + + + + + + + + + @@ -25,13 +57,24 @@ \ No newline at end of file diff --git a/order-system/src/vite-env.d.ts b/order-system/src/vite-env.d.ts index 32b8c54..2d6b540 100644 --- a/order-system/src/vite-env.d.ts +++ b/order-system/src/vite-env.d.ts @@ -65,6 +65,7 @@ declare module '@/api/user/userModel' { pageSize: number; name: string; phone: string; + total: number; } export type UserModel = {