From bdf8eeb1b4e6846938225310dcede89f79227057 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Mon, 23 Jan 2023 19:00:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86/=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E7=AE=A1=E7=90=86/=E6=9F=A5=E8=AF=A2=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=B9=B6=E5=B0=86=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E5=AD=97=E6=AE=B5=E5=90=8D=E4=BB=8E=20notes?= =?UTF-8?q?=20=E8=B0=83=E6=95=B4=E4=B8=BA=20description=EF=BC=8C=E5=B0=86?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=89=8D=E7=AB=AF=E6=96=B9=E6=B3=95=E5=90=8D?= =?UTF-8?q?=E5=89=8D=E7=BC=80=E4=BB=8E=20query=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=B8=BA=20get=EF=BC=8C=E4=BB=A5=E5=8F=8A=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + .../cnadmin/common/model/dto/LoginUser.java | 4 +- .../monitor/model/query/LoginLogQuery.java | 2 +- .../model/query/OperationLogQuery.java | 2 +- .../cnadmin/auth/model/vo/UserInfoVO.java | 6 +- .../cnadmin/system/mapper/DeptMapper.java | 29 +++ .../cnadmin/system/model/entity/SysDept.java | 69 +++++++ .../cnadmin/system/model/entity/SysUser.java | 6 +- .../cnadmin/system/model/query/DeptQuery.java | 55 ++++++ .../cnadmin/system/model/vo/DeptVO.java | 104 ++++++++++ .../cnadmin/system/service/DeptService.java | 40 ++++ .../system/service/impl/DeptServiceImpl.java | 137 +++++++++++++ continew-admin-ui/components.d.ts | 2 + continew-admin-ui/src/api/monitor/log.ts | 8 +- continew-admin-ui/src/api/monitor/online.ts | 2 +- continew-admin-ui/src/api/system/dept.ts | 30 +++ continew-admin-ui/src/locale/en-US.ts | 5 + continew-admin-ui/src/locale/zh-CN.ts | 5 + .../src/router/routes/modules/exception.ts | 2 +- .../src/router/routes/modules/form.ts | 2 +- .../src/router/routes/modules/list.ts | 2 +- .../src/router/routes/modules/monitor.ts | 2 +- .../src/router/routes/modules/profile.ts | 2 +- .../src/router/routes/modules/result.ts | 2 +- .../src/router/routes/modules/system.ts | 28 +++ .../src/router/routes/modules/user.ts | 2 +- .../src/store/modules/login/index.ts | 2 +- .../src/store/modules/login/types.ts | 2 +- .../src/views/monitor/log/login/index.vue | 4 +- .../src/views/monitor/log/operation/index.vue | 4 +- .../src/views/monitor/log/system/index.vue | 8 +- .../src/views/monitor/online/index.vue | 5 +- .../src/views/system/dept/index.vue | 182 ++++++++++++++++++ .../src/views/system/dept/locale/en-US.ts | 3 + .../src/views/system/dept/locale/zh-CN.ts | 3 + .../user/center/components/operation-log.vue | 4 +- .../security-settings/update-email.vue | 2 +- .../controller/system/DeptController.java | 58 ++++++ .../changelog/v0.0.1/continew-admin_data.sql | 12 +- .../changelog/v0.0.1/continew-admin_table.sql | 23 ++- 40 files changed, 820 insertions(+), 42 deletions(-) create mode 100644 continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/DeptMapper.java create mode 100644 continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysDept.java create mode 100644 continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/DeptQuery.java create mode 100644 continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/DeptVO.java create mode 100644 continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/DeptService.java create mode 100644 continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java create mode 100644 continew-admin-ui/src/api/system/dept.ts create mode 100644 continew-admin-ui/src/router/routes/modules/system.ts create mode 100644 continew-admin-ui/src/views/system/dept/index.vue create mode 100644 continew-admin-ui/src/views/system/dept/locale/en-US.ts create mode 100644 continew-admin-ui/src/views/system/dept/locale/zh-CN.ts create mode 100644 continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/DeptController.java diff --git a/README.md b/README.md index e410faaf..9e44f53c 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,7 @@ continew-admin # 全局通用项目配置及依赖版本管理 │ │ ├─ mapper # 系统管理相关 Mapper │ │ ├─ model # 系统管理相关模型 │ │ │ ├─ entity # 系统管理相关实体对象 + │ │ │ ├─ query # 系统管理相关查询条件 │ │ │ ├─ request # 系统管理相关请求对象 │ │ │ └─ vo # 系统管理相关 VO(View Object) │ │ └─ service # 系统管理相关业务接口及实现类 @@ -268,6 +269,7 @@ continew-admin │ │ │ │ └─ system # 系统日志 │ │ │ └─ online # 在线用户 │ │ └─ system # 系统管理模块 + │ │ ├─ dept # 部门管理 │ │ └─ user # 用户模块 │ │ └─ center # 个人中心 │ ├─ App.vue # 视图入口 diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java index 368d0842..fd33c48e 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java @@ -70,9 +70,9 @@ public class LoginUser implements Serializable { private String avatar; /** - * 备注 + * 描述 */ - private String notes; + private String description; /** * 最后一次修改密码的时间 diff --git a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/LoginLogQuery.java b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/LoginLogQuery.java index 26ff2998..97768453 100644 --- a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/LoginLogQuery.java +++ b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/LoginLogQuery.java @@ -46,7 +46,7 @@ public class LoginLogQuery implements Serializable { * 登录状态(1成功 2失败) */ @Schema(description = "登录状态(1成功 2失败)") - @Query(type = Query.Type.EQUAL) + @Query private Integer status; /** diff --git a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/OperationLogQuery.java b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/OperationLogQuery.java index c0c41668..eed87c7f 100644 --- a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/OperationLogQuery.java +++ b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/query/OperationLogQuery.java @@ -62,7 +62,7 @@ public class OperationLogQuery implements Serializable { * 操作状态(1成功 2失败) */ @Schema(description = "操作状态(1成功 2失败)") - @Query(type = Type.EQUAL) + @Query private Integer status; /** diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/model/vo/UserInfoVO.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/model/vo/UserInfoVO.java index ebd3c384..b748004d 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/model/vo/UserInfoVO.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/model/vo/UserInfoVO.java @@ -87,10 +87,10 @@ public class UserInfoVO implements Serializable { private String avatar; /** - * 备注 + * 描述 */ - @Schema(description = "备注") - private String notes; + @Schema(description = "描述") + private String description; /** * 最后一次修改密码的时间 diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/DeptMapper.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/DeptMapper.java new file mode 100644 index 00000000..470bd5c3 --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/DeptMapper.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.cnadmin.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import top.charles7c.cnadmin.system.model.entity.SysDept; + +/** + * 部门 Mapper + * + * @author Charles7c + * @since 2023/1/22 17:56 + */ +public interface DeptMapper extends BaseMapper {} diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysDept.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysDept.java new file mode 100644 index 00000000..9618da31 --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysDept.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.cnadmin.system.model.entity; + +import lombok.Data; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum; +import top.charles7c.cnadmin.common.model.entity.BaseEntity; + +/** + * 部门实体 + * + * @author Charles7c + * @since 2023/1/22 13:50 + */ +@Data +@TableName("sys_dept") +public class SysDept extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 部门 ID + */ + @TableId + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 上级部门 ID + */ + private Long parentId; + + /** + * 部门排序 + */ + private Integer deptSort; + + /** + * 描述 + */ + private String description; + + /** + * 状态(1启用 2禁用) + */ + private DisEnableStatusEnum status; +} diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java index 7cfd2fac..fe179cca 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java @@ -40,7 +40,7 @@ public class SysUser extends BaseEntity { private static final long serialVersionUID = 1L; /** - * 用户ID + * 用户 ID */ @TableId private Long userId; @@ -81,9 +81,9 @@ public class SysUser extends BaseEntity { private String avatar; /** - * 备注 + * 描述 */ - private String notes; + private String description; /** * 状态(1启用 2禁用) diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/DeptQuery.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/DeptQuery.java new file mode 100644 index 00000000..dd11106e --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/query/DeptQuery.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.cnadmin.system.model.query; + +import java.io.Serializable; + +import lombok.Data; + +import io.swagger.v3.oas.annotations.media.Schema; + +import org.springdoc.api.annotations.ParameterObject; + +import top.charles7c.cnadmin.common.annotation.Query; + +/** + * 部门查询条件 + * + * @author Charles7c + * @since 2023/1/22 17:52 + */ +@Data +@ParameterObject +@Schema(description = "部门查询条件") +public class DeptQuery implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 部门名称 + */ + @Schema(description = "部门名称") + @Query(type = Query.Type.INNER_LIKE) + private String deptName; + + /** + * 状态(1启用 2禁用) + */ + @Schema(description = "状态(1启用 2禁用)") + @Query + private Integer status; +} diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/DeptVO.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/DeptVO.java new file mode 100644 index 00000000..0a132c97 --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/DeptVO.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.cnadmin.system.model.vo; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +import io.swagger.v3.oas.annotations.media.Schema; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum; + +/** + * 部门信息 + * + * @author Charles7c + * @since 2023/1/22 13:53 + */ +@Data +@Accessors(chain = true) +@Schema(description = "部门信息") +public class DeptVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 部门 ID + */ + @Schema(description = "部门 ID") + private Long deptId; + + /** + * 部门名称 + */ + @Schema(description = "部门名称") + private String deptName; + + /** + * 上级部门 ID + */ + @Schema(description = "上级部门 ID") + private Long parentId; + + /** + * 部门排序 + */ + @Schema(description = "部门排序") + private Integer deptSort; + + /** + * 描述 + */ + @Schema(description = "描述") + private String description; + + /** + * 状态(1启用 2禁用) + */ + @Schema(description = "状态(1启用 2禁用)") + private DisEnableStatusEnum status; + + /** + * 修改人 + */ + @JsonIgnore + private Long updateUser; + + /** + * 修改人昵称 + */ + @Schema(description = "修改人昵称") + private String updateUserString; + + /** + * 修改时间 + */ + @Schema(description = "修改时间") + private LocalDateTime updateTime; + + /** + * 子部门列表 + */ + @Schema(description = "子部门列表") + private List children; +} diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/DeptService.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/DeptService.java new file mode 100644 index 00000000..6871b13e --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/DeptService.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.cnadmin.system.service; + +import java.util.List; + +import top.charles7c.cnadmin.system.model.query.DeptQuery; +import top.charles7c.cnadmin.system.model.vo.DeptVO; + +/** + * 部门业务接口 + * + * @author Charles7c + * @since 2023/1/22 17:54 + */ +public interface DeptService { + + /** + * 查询列表 + * + * @param query + * 查询条件 + * @return 列表数据 + */ + List list(DeptQuery query); +} diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java new file mode 100644 index 00000000..2a0e0397 --- /dev/null +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.cnadmin.system.service.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import lombok.RequiredArgsConstructor; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; + +import top.charles7c.cnadmin.common.util.ExceptionUtils; +import top.charles7c.cnadmin.common.util.helper.QueryHelper; +import top.charles7c.cnadmin.system.mapper.DeptMapper; +import top.charles7c.cnadmin.system.model.entity.SysDept; +import top.charles7c.cnadmin.system.model.query.DeptQuery; +import top.charles7c.cnadmin.system.model.vo.DeptVO; +import top.charles7c.cnadmin.system.service.DeptService; +import top.charles7c.cnadmin.system.service.UserService; + +/** + * 部门业务实现类 + * + * @author Charles7c + * @since 2023/1/22 17:55 + */ +@Service +@RequiredArgsConstructor +public class DeptServiceImpl implements DeptService { + + private final DeptMapper deptMapper; + private final UserService userService; + + @Override + public List list(DeptQuery query) { + QueryWrapper queryWrapper = QueryHelper.build(query); + queryWrapper.lambda().orderByAsc(SysDept::getParentId).orderByAsc(SysDept::getDeptSort) + .orderByDesc(SysDept::getUpdateTime); + List list = deptMapper.selectList(queryWrapper); + List voList = BeanUtil.copyToList(list, DeptVO.class); + voList.forEach(this::fill); + return buildTree(voList); + } + + /** + * 填充数据 + * + * @param vo + * VO + */ + private void fill(DeptVO vo) { + Long updateUser = vo.getUpdateUser(); + if (updateUser == null) { + return; + } + vo.setUpdateUserString(ExceptionUtils.exToNull(() -> userService.getById(vo.getUpdateUser())).getNickname()); + } + + /** + * 构建树 + * + * @param list + * 原始列表数据 + * @return 树列表 + */ + private List buildTree(List list) { + if (CollUtil.isEmpty(list)) { + return new ArrayList<>(); + } + + // 去重 + List deDuplicationDeptList = deDuplication(list); + return deDuplicationDeptList.stream().map(d -> d.setChildren(this.getChildren(d, list))) + .collect(Collectors.toList()); + } + + /** + * 数据去重(去除重复子部门列表) + * + * @param list + * 部门列表 + * @return 去重后部门列表 + */ + private List deDuplication(List list) { + List deptList = new ArrayList<>(); + for (DeptVO outerDept : list) { + boolean flag = true; + for (DeptVO innerDept : list) { + // 忽略重复子列表 + if (innerDept.getDeptId().equals(outerDept.getParentId())) { + flag = false; + break; + } + } + + if (flag) { + deptList.add(outerDept); + } + } + return deptList; + } + + /** + * 获取指定部门的子部门列表 + * + * @param dept + * 指定部门 + * @param list + * 部门列表 + * @return 子部门列表 + */ + private List getChildren(DeptVO dept, List list) { + return list.stream().filter(d -> Objects.equals(d.getParentId(), dept.getDeptId())) + .map(d -> d.setChildren(this.getChildren(d, list))).collect(Collectors.toList()); + } +} diff --git a/continew-admin-ui/components.d.ts b/continew-admin-ui/components.d.ts index 1831dde7..9ba2091b 100644 --- a/continew-admin-ui/components.d.ts +++ b/continew-admin-ui/components.d.ts @@ -24,6 +24,7 @@ declare module '@vue/runtime-core' { ACol: typeof import('@arco-design/web-vue')['Col'] AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider'] ADescriptions: typeof import('@arco-design/web-vue')['Descriptions'] + ADescriptionsItem: typeof import('@arco-design/web-vue')['DescriptionsItem'] ADivider: typeof import('@arco-design/web-vue')['Divider'] ADoption: typeof import('@arco-design/web-vue')['Doption'] ADrawer: typeof import('@arco-design/web-vue')['Drawer'] @@ -46,6 +47,7 @@ declare module '@vue/runtime-core' { AListItemMeta: typeof import('@arco-design/web-vue')['ListItemMeta'] AMenu: typeof import('@arco-design/web-vue')['Menu'] AMenuItem: typeof import('@arco-design/web-vue')['MenuItem'] + AModal: typeof import('@arco-design/web-vue')['Modal'] AOption: typeof import('@arco-design/web-vue')['Option'] APopover: typeof import('@arco-design/web-vue')['Popover'] ARadio: typeof import('@arco-design/web-vue')['Radio'] diff --git a/continew-admin-ui/src/api/monitor/log.ts b/continew-admin-ui/src/api/monitor/log.ts index 45ffe5b3..3fb6ace2 100644 --- a/continew-admin-ui/src/api/monitor/log.ts +++ b/continew-admin-ui/src/api/monitor/log.ts @@ -47,7 +47,7 @@ export interface LoginLogListRes { list: LoginLogRecord[]; total: number; } -export function queryLoginLogList(params: LoginLogParams) { +export function getLoginLogList(params: LoginLogParams) { return axios.get('/monitor/log/login', { params, paramsSerializer: (obj) => { @@ -66,7 +66,7 @@ export interface OperationLogListRes { list: OperationLogRecord[]; total: number; } -export function queryOperationLogList(params: OperationLogParams) { +export function getOperationLogList(params: OperationLogParams) { return axios.get('/monitor/log/operation', { params, paramsSerializer: (obj) => { @@ -85,7 +85,7 @@ export interface SystemLogListRes { list: SystemLogRecord[]; total: number; } -export function querySystemLogList(params: SystemLogParams) { +export function getSystemLogList(params: SystemLogParams) { return axios.get('/monitor/log/system', { params, paramsSerializer: (obj) => { @@ -94,6 +94,6 @@ export function querySystemLogList(params: SystemLogParams) { }); } -export function querySystemLogDetail(logId: string) { +export function getSystemLogDetail(logId: string) { return axios.get(`/monitor/log/system/${logId}`); } \ No newline at end of file diff --git a/continew-admin-ui/src/api/monitor/online.ts b/continew-admin-ui/src/api/monitor/online.ts index 77501928..2072304b 100644 --- a/continew-admin-ui/src/api/monitor/online.ts +++ b/continew-admin-ui/src/api/monitor/online.ts @@ -21,7 +21,7 @@ export interface OnlineUserListRes { total: number; } -export function queryOnlineUserList(params: OnlineUserParams) { +export function getOnlineUserList(params: OnlineUserParams) { return axios.get('/monitor/online/user', { params, paramsSerializer: (obj) => { diff --git a/continew-admin-ui/src/api/system/dept.ts b/continew-admin-ui/src/api/system/dept.ts new file mode 100644 index 00000000..45d9e659 --- /dev/null +++ b/continew-admin-ui/src/api/system/dept.ts @@ -0,0 +1,30 @@ +import axios from 'axios'; + +import qs from 'query-string'; + +export interface DeptRecord { + deptId: string; + deptName: string; + parentId: string; + deptSort: number; + description: string; + status: number; + updateUserString: string; + updateTime: string; + children: Array, +} + +export interface DeptParams extends Partial { + page: number; + size: number; + sort: Array; +} + +export function getDeptList(params: DeptParams) { + return axios.get('/system/dept', { + params, + paramsSerializer: (obj) => { + return qs.stringify(obj); + }, + }); +} \ No newline at end of file diff --git a/continew-admin-ui/src/locale/en-US.ts b/continew-admin-ui/src/locale/en-US.ts index d33820e0..1de5e597 100644 --- a/continew-admin-ui/src/locale/en-US.ts +++ b/continew-admin-ui/src/locale/en-US.ts @@ -8,6 +8,8 @@ import localeMonitor from '@/views/dashboard/monitor/locale/en-US'; import localeDataAnalysis from '@/views/visualization/data-analysis/locale/en-US'; import localeMultiDAnalysis from '@/views/visualization/multi-dimension-data-analysis/locale/en-US'; +import localeDept from '@/views/system/dept/locale/en-US'; + import localeOnlineUser from '@/views/monitor/online/locale/en-US'; import localeLoginLog from '@/views/monitor/log/login/locale/en-US'; import localeOperationLog from '@/views/monitor/log/operation/locale/en-US'; @@ -39,6 +41,7 @@ export default { 'menu.server.workplace': 'Workplace-Server', 'menu.server.monitor': 'Monitor-Server', 'menu.visualization': 'Data Visualization', + 'menu.system': 'System management', 'menu.monitor': 'Monitor', 'menu.list': 'List', 'menu.form': 'Form', @@ -58,6 +61,8 @@ export default { ...localeDataAnalysis, ...localeMultiDAnalysis, + ...localeDept, + ...localeOnlineUser, ...localeLoginLog, ...localeOperationLog, diff --git a/continew-admin-ui/src/locale/zh-CN.ts b/continew-admin-ui/src/locale/zh-CN.ts index c200ef44..eed55cb6 100644 --- a/continew-admin-ui/src/locale/zh-CN.ts +++ b/continew-admin-ui/src/locale/zh-CN.ts @@ -8,6 +8,8 @@ import localeMonitor from '@/views/dashboard/monitor/locale/zh-CN'; import localeDataAnalysis from '@/views/visualization/data-analysis/locale/zh-CN'; import localeMultiDAnalysis from '@/views/visualization/multi-dimension-data-analysis/locale/zh-CN'; +import localeDept from '@/views/system/dept/locale/zh-CN'; + import localeOnlineUser from '@/views/monitor/online/locale/zh-CN'; import localeLoginLog from '@/views/monitor/log/login/locale/zh-CN'; import localeOperationLog from '@/views/monitor/log/operation/locale/zh-CN'; @@ -39,6 +41,7 @@ export default { 'menu.server.workplace': '工作台-服务端', 'menu.server.monitor': '实时监控-服务端', 'menu.visualization': '数据可视化', + 'menu.system': '系统管理', 'menu.monitor': '系统监控', 'menu.list': '列表页', 'menu.form': '表单页', @@ -58,6 +61,8 @@ export default { ...localeDataAnalysis, ...localeMultiDAnalysis, + ...localeDept, + ...localeOnlineUser, ...localeLoginLog, ...localeOperationLog, diff --git a/continew-admin-ui/src/router/routes/modules/exception.ts b/continew-admin-ui/src/router/routes/modules/exception.ts index 226ae54b..e0cc05b7 100644 --- a/continew-admin-ui/src/router/routes/modules/exception.ts +++ b/continew-admin-ui/src/router/routes/modules/exception.ts @@ -9,7 +9,7 @@ const EXCEPTION: AppRouteRecordRaw = { locale: 'menu.exception', requiresAuth: true, icon: 'icon-exclamation-circle', - order: 7, + order: 8, }, children: [ { diff --git a/continew-admin-ui/src/router/routes/modules/form.ts b/continew-admin-ui/src/router/routes/modules/form.ts index c2fe158a..c4f6bcb1 100644 --- a/continew-admin-ui/src/router/routes/modules/form.ts +++ b/continew-admin-ui/src/router/routes/modules/form.ts @@ -9,7 +9,7 @@ const FORM: AppRouteRecordRaw = { locale: 'menu.form', icon: 'icon-settings', requiresAuth: true, - order: 4, + order: 5, }, children: [ { diff --git a/continew-admin-ui/src/router/routes/modules/list.ts b/continew-admin-ui/src/router/routes/modules/list.ts index 59190702..7a2f62ab 100644 --- a/continew-admin-ui/src/router/routes/modules/list.ts +++ b/continew-admin-ui/src/router/routes/modules/list.ts @@ -9,7 +9,7 @@ const LIST: AppRouteRecordRaw = { locale: 'menu.list', requiresAuth: true, icon: 'icon-list', - order: 3, + order: 4, }, children: [ { diff --git a/continew-admin-ui/src/router/routes/modules/monitor.ts b/continew-admin-ui/src/router/routes/modules/monitor.ts index 0bd5bd1b..0a3c863c 100644 --- a/continew-admin-ui/src/router/routes/modules/monitor.ts +++ b/continew-admin-ui/src/router/routes/modules/monitor.ts @@ -9,7 +9,7 @@ const Monitor: AppRouteRecordRaw = { locale: 'menu.monitor', requiresAuth: true, icon: 'icon-computer', - order: 2, + order: 3, }, children: [ { diff --git a/continew-admin-ui/src/router/routes/modules/profile.ts b/continew-admin-ui/src/router/routes/modules/profile.ts index c94d044c..a95f60a9 100644 --- a/continew-admin-ui/src/router/routes/modules/profile.ts +++ b/continew-admin-ui/src/router/routes/modules/profile.ts @@ -9,7 +9,7 @@ const PROFILE: AppRouteRecordRaw = { locale: 'menu.profile', requiresAuth: true, icon: 'icon-file', - order: 5, + order: 6, }, children: [ { diff --git a/continew-admin-ui/src/router/routes/modules/result.ts b/continew-admin-ui/src/router/routes/modules/result.ts index 4419dd14..6eb96610 100644 --- a/continew-admin-ui/src/router/routes/modules/result.ts +++ b/continew-admin-ui/src/router/routes/modules/result.ts @@ -9,7 +9,7 @@ const RESULT: AppRouteRecordRaw = { locale: 'menu.result', icon: 'icon-check-circle', requiresAuth: true, - order: 6, + order: 7, }, children: [ { diff --git a/continew-admin-ui/src/router/routes/modules/system.ts b/continew-admin-ui/src/router/routes/modules/system.ts new file mode 100644 index 00000000..b0c71c23 --- /dev/null +++ b/continew-admin-ui/src/router/routes/modules/system.ts @@ -0,0 +1,28 @@ +import { DEFAULT_LAYOUT } from '../base'; +import { AppRouteRecordRaw } from '../types'; + +const System: AppRouteRecordRaw = { + path: '/system', + name: 'system', + component: DEFAULT_LAYOUT, + meta: { + locale: 'menu.system', + requiresAuth: true, + icon: 'icon-settings', + order: 2, + }, + children: [ + { + path: '/system/dept', + name: 'Dept', + component: () => import('@/views/system/dept/index.vue'), + meta: { + locale: 'menu.system.dept.list', + requiresAuth: true, + roles: ['*'], + }, + }, + ], +}; + +export default System; diff --git a/continew-admin-ui/src/router/routes/modules/user.ts b/continew-admin-ui/src/router/routes/modules/user.ts index eb6b3a4e..839733e8 100644 --- a/continew-admin-ui/src/router/routes/modules/user.ts +++ b/continew-admin-ui/src/router/routes/modules/user.ts @@ -9,7 +9,7 @@ const USER: AppRouteRecordRaw = { locale: 'menu.user', icon: 'icon-user', requiresAuth: true, - order: 8, + order: 9, }, children: [ { diff --git a/continew-admin-ui/src/store/modules/login/index.ts b/continew-admin-ui/src/store/modules/login/index.ts index 9de81a76..a35c7bcf 100644 --- a/continew-admin-ui/src/store/modules/login/index.ts +++ b/continew-admin-ui/src/store/modules/login/index.ts @@ -20,7 +20,7 @@ const useLoginStore = defineStore('user', { phone: undefined, email: '', avatar: undefined, - notes: undefined, + description: undefined, pwdResetTime: undefined, registrationDate: undefined, diff --git a/continew-admin-ui/src/store/modules/login/types.ts b/continew-admin-ui/src/store/modules/login/types.ts index 2320d167..301e5635 100644 --- a/continew-admin-ui/src/store/modules/login/types.ts +++ b/continew-admin-ui/src/store/modules/login/types.ts @@ -7,7 +7,7 @@ export interface UserState { phone?: string; email: string; avatar?: string; - notes?: string; + description?: string; pwdResetTime?: string; registrationDate?: string; diff --git a/continew-admin-ui/src/views/monitor/log/login/index.vue b/continew-admin-ui/src/views/monitor/log/login/index.vue index 3eee355b..09a716d2 100644 --- a/continew-admin-ui/src/views/monitor/log/login/index.vue +++ b/continew-admin-ui/src/views/monitor/log/login/index.vue @@ -71,7 +71,7 @@ + + + + diff --git a/continew-admin-ui/src/views/system/dept/locale/en-US.ts b/continew-admin-ui/src/views/system/dept/locale/en-US.ts new file mode 100644 index 00000000..a8107bc9 --- /dev/null +++ b/continew-admin-ui/src/views/system/dept/locale/en-US.ts @@ -0,0 +1,3 @@ +export default { + 'menu.system.dept.list': 'Department management', +}; diff --git a/continew-admin-ui/src/views/system/dept/locale/zh-CN.ts b/continew-admin-ui/src/views/system/dept/locale/zh-CN.ts new file mode 100644 index 00000000..b27ef70f --- /dev/null +++ b/continew-admin-ui/src/views/system/dept/locale/zh-CN.ts @@ -0,0 +1,3 @@ +export default { + 'menu.system.dept.list': '部门管理', +}; diff --git a/continew-admin-ui/src/views/system/user/center/components/operation-log.vue b/continew-admin-ui/src/views/system/user/center/components/operation-log.vue index ebde7df0..04da667f 100644 --- a/continew-admin-ui/src/views/system/user/center/components/operation-log.vue +++ b/continew-admin-ui/src/views/system/user/center/components/operation-log.vue @@ -46,7 +46,7 @@ import { computed, ref, reactive } from 'vue'; import useLoading from '@/hooks/loading'; import { useLoginStore } from '@/store'; - import { queryOperationLogList, OperationLogRecord, OperationLogParams } from '@/api/monitor/log'; + import { getOperationLogList, OperationLogRecord, OperationLogParams } from '@/api/monitor/log'; import { Pagination } from '@/types/global'; import type { TableColumnData } from '@arco-design/web-vue/es/table/interface'; import { PaginationProps } from "@arco-design/web-vue"; @@ -109,7 +109,7 @@ ) => { setLoading(true); try { - const { data } = await queryOperationLogList(params); + const { data } = await getOperationLogList(params); renderData.value = data.list; pagination.current = params.page; pagination.total = data.total; diff --git a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue index 5c0277b6..3097054d 100644 --- a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue +++ b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue @@ -171,7 +171,7 @@ captchaBtnNameKey.value = t('userCenter.securitySettings.updateEmail.form.reSendCaptcha'); captchaDisable.value = false; } - }, 1000) + }, 1000); } } catch (err) { resetCaptcha(); diff --git a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/DeptController.java b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/DeptController.java new file mode 100644 index 00000000..6bcc5c86 --- /dev/null +++ b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/system/DeptController.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.charles7c.cnadmin.webapi.controller.system; + +import java.util.List; + +import lombok.RequiredArgsConstructor; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + +import org.springframework.http.MediaType; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import top.charles7c.cnadmin.common.model.vo.R; +import top.charles7c.cnadmin.system.model.query.DeptQuery; +import top.charles7c.cnadmin.system.model.vo.DeptVO; +import top.charles7c.cnadmin.system.service.DeptService; + +/** + * 部门管理 API + * + * @author Charles7c + * @since 2023/1/22 17:50 + */ +@Tag(name = "部门管理 API") +@Validated +@RestController +@RequiredArgsConstructor +@RequestMapping(value = "/system/dept", produces = MediaType.APPLICATION_JSON_VALUE) +public class DeptController { + + private final DeptService deptService; + + @Operation(summary = "查询部门列表") + @GetMapping + public R> list(@Validated DeptQuery query) { + List list = deptService.list(query); + return R.ok(list); + } +} diff --git a/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_data.sql b/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_data.sql index 5ba30bdf..fd22fdda 100644 --- a/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_data.sql +++ b/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_data.sql @@ -1,6 +1,16 @@ -- liquibase formatted sql -- changeset Charles7c:1 --- 初始化默认用户:admin/123456;test/123456 +-- 初始化默认部门 +INSERT IGNORE INTO `sys_dept` VALUES (1, 'Xxx科技有限公司', 0, 1, NULL, 1, 1, NOW(), 1, NOW()); +INSERT IGNORE INTO `sys_dept` VALUES (2, '天津总部', 1, 1, NULL, 1, 1, NOW(), 1, NOW()); +INSERT IGNORE INTO `sys_dept` VALUES (3, '研发部', 2, 1, NULL, 1, 1, NOW(), 1, NOW()); +INSERT IGNORE INTO `sys_dept` VALUES (4, 'UI部', 2, 2, NULL, 1, 1, NOW(), 1, NOW()); +INSERT IGNORE INTO `sys_dept` VALUES (5, '测试部', 2, 3, NULL, 1, 1, NOW(), 1, NOW()); +INSERT IGNORE INTO `sys_dept` VALUES (6, '运维部', 2, 4, NULL, 1, 1, NOW(), 1, NOW()); +INSERT IGNORE INTO `sys_dept` VALUES (7, '研发一组', 3, 1, NULL, 1, 1, NOW(), 1, NOW()); +INSERT IGNORE INTO `sys_dept` VALUES (8, '研发二组', 3, 2, NULL, 2, 1, NOW(), 1, NOW()); + +-- 初始化默认用户:admin/admin123;test/123456 INSERT IGNORE INTO `sys_user` VALUES (1, 'admin', '超级管理员', '9802815bcc5baae7feb1ae0d0566baf2', 1, '18888888888', 'charles7c@126.com', NULL, NULL, 1, NOW(), 1, NOW(), 1, NOW()); INSERT IGNORE INTO `sys_user` VALUES (2, 'test', '测试员', '8e114197e1b33783a00542ad67e80516', 0, NULL, NULL, NULL, NULL, 2, NOW(), 1, NOW(), 1, NOW()); diff --git a/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_table.sql b/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_table.sql index 522a1e1b..0920405f 100644 --- a/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_table.sql +++ b/continew-admin-webapi/src/main/resources/db/changelog/v0.0.1/continew-admin_table.sql @@ -1,6 +1,23 @@ -- liquibase formatted sql -- changeset Charles7c:1 +CREATE TABLE IF NOT EXISTS `sys_dept` ( + `dept_id` bigint(20) unsigned AUTO_INCREMENT COMMENT '部门ID', + `dept_name` varchar(255) NOT NULL COMMENT '部门名称', + `parent_id` bigint(20) unsigned DEFAULT 0 COMMENT '上级部门ID', + `dept_sort` int(11) unsigned DEFAULT 999 COMMENT '部门排序', + `description` varchar(512) DEFAULT NULL COMMENT '描述', + `status` tinyint(1) unsigned DEFAULT 1 COMMENT '状态(1启用 2禁用)', + `create_user` bigint(20) unsigned NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user` bigint(20) unsigned NOT NULL COMMENT '修改人', + `update_time` datetime NOT NULL COMMENT '修改时间', + PRIMARY KEY (`dept_id`) USING BTREE, + INDEX `idx_parent_id`(`parent_id`) USING BTREE, + INDEX `idx_create_user`(`create_user`) USING BTREE, + INDEX `idx_update_user`(`update_user`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表'; + CREATE TABLE IF NOT EXISTS `sys_user` ( `user_id` bigint(20) unsigned AUTO_INCREMENT COMMENT '用户ID', `username` varchar(255) NOT NULL COMMENT '用户名', @@ -10,7 +27,7 @@ CREATE TABLE IF NOT EXISTS `sys_user` ( `phone` varchar(255) DEFAULT NULL COMMENT '手机号码', `email` varchar(255) DEFAULT NULL COMMENT '邮箱', `avatar` varchar(255) DEFAULT NULL COMMENT '头像地址', - `notes` varchar(512) DEFAULT NULL COMMENT '备注', + `description` varchar(512) DEFAULT NULL COMMENT '描述', `status` tinyint(1) unsigned DEFAULT 1 COMMENT '状态(1启用 2禁用)', `pwd_reset_time` datetime DEFAULT NULL COMMENT '最后一次修改密码的时间', `create_user` bigint(20) unsigned NOT NULL COMMENT '创建人', @@ -20,8 +37,8 @@ CREATE TABLE IF NOT EXISTS `sys_user` ( PRIMARY KEY (`user_id`) USING BTREE, UNIQUE INDEX `uk_username`(`username`) USING BTREE, UNIQUE INDEX `uk_email`(`email`) USING BTREE, - INDEX `idx_createUser`(`create_user`) USING BTREE, - INDEX `idx_updateUser`(`update_user`) USING BTREE + INDEX `idx_create_user`(`create_user`) USING BTREE, + INDEX `idx_update_user`(`update_user`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; CREATE TABLE IF NOT EXISTS `sys_log` (