ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-ui/src/api/system/user.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-ui/src/views/system/user/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -1,9 +1,12 @@ package com.ruoyi.web.controller.system; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; @@ -12,8 +15,10 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.vo.SysUserExportVo; import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.service.ISysPostService; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; @@ -23,6 +28,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -62,11 +69,19 @@ @Log(title = "用户管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:user:export')") @GetMapping("/export") public AjaxResult export(SysUser user) public void export(SysUser user, HttpServletResponse response) { List<SysUser> list = userService.selectUserList(user); ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); return util.exportExcel(list, "用户数据"); List<SysUserExportVo> listVo = BeanUtil.copyToList(list, SysUserExportVo.class); for (int i = 0; i < list.size(); i++) { SysDept dept = list.get(i).getDept(); SysUserExportVo vo = listVo.get(i); if (ObjectUtil.isNotEmpty(dept)) { vo.setDeptName(dept.getDeptName()); vo.setLeader(dept.getLeader()); } } ExcelUtils.exportExcel(listVo, "用户数据", SysUserExportVo.class, response); } @Log(title = "用户管理", businessType = BusinessType.IMPORT) @@ -74,19 +89,18 @@ @PostMapping("/importData") public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); List<SysUser> userList = util.importExcel(file.getInputStream()); LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); List<SysUserImportVo> userListVo = ExcelUtils.importExcel(file.getInputStream(), SysUserImportVo.class); List<SysUser> userList = BeanUtil.copyToList(userListVo, SysUser.class); LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); String operName = loginUser.getUsername(); String message = userService.importUser(userList, updateSupport, operName); return AjaxResult.success(message); } @GetMapping("/importTemplate") public AjaxResult importTemplate() public void importTemplate(HttpServletResponse response) { ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); return util.importTemplateExcel("用户数据"); ExcelUtils.exportExcel(new ArrayList<>(), "用户数据", SysUserImportVo.class, response); } /** ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -1,13 +1,8 @@ package com.ruoyi.common.core.domain.entity; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.annotation.Excel.Type; import com.ruoyi.common.annotation.Excels; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; @@ -37,14 +32,12 @@ /** * 用户ID */ @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") @TableId(value = "user_id", type = IdType.AUTO) private Long userId; /** * 部门ID */ @Excel(name = "部门编号", type = Type.IMPORT) private Long deptId; /** @@ -52,14 +45,12 @@ */ @NotBlank(message = "用户账号不能为空") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") @Excel(name = "登录名称") private String userName; /** * 用户昵称 */ @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") @Excel(name = "用户名称") private String nickName; /** @@ -67,19 +58,16 @@ */ @Email(message = "邮箱格式不正确") @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") @Excel(name = "用户邮箱") private String email; /** * 手机号码 */ @Excel(name = "手机号码") private String phonenumber; /** * 用户性别 */ @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") private String sex; /** @@ -106,7 +94,6 @@ /** * 帐号状态(0正常 1停用) */ @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") private String status; /** @@ -118,13 +105,11 @@ /** * 最后登录IP */ @Excel(name = "最后登录IP", type = Type.EXPORT) private String loginIp; /** * 最后登录时间 */ @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) private Date loginDate; /** @@ -137,7 +122,6 @@ * 创建时间 */ @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** @@ -150,7 +134,6 @@ * 更新时间 */ @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; /** @@ -167,10 +150,6 @@ /** * 部门对象 */ @Excels({ @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) }) @TableField(exist = false) private SysDept dept; ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtils.java
@@ -29,7 +29,7 @@ * @return 转换后集合 */ public static <T> List<T> importExcel(InputStream is, Class<T> clazz) { return EasyExcel.read(is).head(clazz).sheet().doReadSync(); return EasyExcel.read(is).autoCloseStream(false).sheet().doReadSync(); } /** ruoyi-ui/src/api/system/user.js
@@ -44,15 +44,6 @@ }) } // 导出用户 export function exportUser(query) { return request({ url: '/system/user/export', method: 'get', params: query }) } // 用户密码重置 export function resetUserPwd(userId, password) { const data = { @@ -115,14 +106,6 @@ url: '/system/user/profile/avatar', method: 'post', data: data }) } // 下载用户导入模板 export function importTemplate() { return request({ url: '/system/user/importTemplate', method: 'get' }) } ruoyi-ui/src/views/system/user/index.vue
@@ -346,11 +346,12 @@ </template> <script> import { listUser, getUser, delUser, addUser, updateUser, exportUser, resetUserPwd, changeUserStatus, importTemplate } from "@/api/system/user"; import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus } from "@/api/system/user"; import { getToken } from "@/utils/auth"; import { treeselect } from "@/api/system/dept"; import Treeselect from "@riophae/vue-treeselect"; import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import { downLoadExcel } from "@/utils/download"; export default { name: "User", @@ -660,18 +661,7 @@ }, /** 导出按钮操作 */ handleExport() { const queryParams = this.queryParams; this.$confirm('是否确认导出所有用户数据项?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { this.exportLoading = true; return exportUser(queryParams); }).then(response => { this.download(response.msg); this.exportLoading = false; }).catch(() => {}); downLoadExcel('/system/user/export', this.queryParams); }, /** 导入按钮操作 */ handleImport() { @@ -680,9 +670,7 @@ }, /** 下载模板操作 */ importTemplate() { importTemplate().then(response => { this.download(response.msg); }); downLoadExcel('/system/user/importTemplate'); }, // 文件上传中处理 handleFileUploadProgress(event, file, fileList) {