mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-09-13 14:57:16 +08:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
3f8f4e2bf4 | |||
3fcdb54442 | |||
5d159c6ab3 | |||
39969ebf61 | |||
47a5746794 | |||
8820c1dfc8 | |||
712eedba1b | |||
47a8160d70 | |||
b63d7d725d | |||
f15494d348 | |||
91ea4ed685 |
17
CHANGELOG.md
17
CHANGELOG.md
@@ -1,3 +1,20 @@
|
||||
## [v1.3.1](https://github.com/Charles7c/continew-admin/compare/v1.3.0...v1.3.1) (2023-11-15)
|
||||
|
||||
### 💎 功能优化
|
||||
|
||||
- 完善 Redis 部署配置 ([39969eb](https://github.com/Charles7c/continew-admin/commit/39969ebf6173fc379dc3501e9204a344d1cf62cf))
|
||||
- 优化 401 状态处理逻辑 ([8820c1d](https://github.com/Charles7c/continew-admin/commit/8820c1dfc858b9ef9df470e90dfe9ba4b1166e29))
|
||||
- 优化超时登录处理逻辑 ([712eedb](https://github.com/Charles7c/continew-admin/commit/712eedba1be0ec371119745d4596cd35c2ce25d6))
|
||||
- 优化部分变量命名 ([f15494d](https://github.com/Charles7c/continew-admin/commit/f15494d34823ded87efc396d98e2eb0108f74a3d))
|
||||
|
||||
### 🐛 问题修复
|
||||
|
||||
- sms4j 3.0.3 => 3.0.4 ([3fcdb54](https://github.com/Charles7c/continew-admin/commit/3fcdb54442b380e76838478fa46e8dfb70a2759b))
|
||||
- 发送消息增加事务处理 ([5d159c6](https://github.com/Charles7c/continew-admin/commit/5d159c6ab337a9432419d84cf246cff506500567))
|
||||
- 修复仪表盘访问趋势区块 y 轴数值过大时无法展示的问题 ([47a5746](https://github.com/Charles7c/continew-admin/commit/47a5746794e552faf9c41fbcc21af091a878eb95))
|
||||
- 修复控制台报错 Please use theme before using plugins ([47a8160](https://github.com/Charles7c/continew-admin/commit/47a8160d70862a5ee7284c165004cece2714a10f))
|
||||
- 修复 Swagger 分组接口缺失 ([b63d7d7](https://github.com/Charles7c/continew-admin/commit/b63d7d725da5e9e9b2db9fd59bd140d64b50040c))
|
||||
|
||||
## [v1.3.0](https://github.com/Charles7c/continew-admin/compare/v1.2.0...v1.3.0) (2023-11-04)
|
||||
|
||||
### ✨ 新特性
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<img src="https://img.shields.io/badge/License-Apache--2.0-blue.svg" alt="License" />
|
||||
</a>
|
||||
<a href="https://github.com/Charles7c/continew-admin" target="_blank">
|
||||
<img src="https://img.shields.io/badge/RELEASE-v1.3.0-%23ff3f59.svg" alt="Release" />
|
||||
<img src="https://img.shields.io/badge/RELEASE-v1.3.1-%23ff3f59.svg" alt="Release" />
|
||||
</a>
|
||||
<a href="https://github.com/Charles7c/continew-admin" target="_blank">
|
||||
<img src="https://img.shields.io/github/stars/Charles7c/continew-admin?style=social" alt="GitHub stars" />
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
## 简介
|
||||
|
||||
ContiNew Admin (Continue New Admin)中后台管理框架/脚手架,持续以最新流行技术栈构建,拥抱变化,迭代优化。在社区贡献者的支持和参与下,持续发展并源源不断地为企业级项目开发提供助力。当前采用的技术栈:Vue3、Spring Boot3、TypeScript、Arco Design Vue、Undertow、Sa-Token、JWT、MariaDB、MyBatis Plus、Redis、Redisson、Easy Excel、Hutool 等。
|
||||
ContiNew Admin (Continue New Admin)中后台管理框架/脚手架,持续以最新流行技术栈构建,拥抱变化,迭代优化。在社区贡献者的支持和参与下,持续发展并源源不断地为企业级项目开发提供助力。当前采用的技术栈:Vue3、**Spring Boot 2.7.x(JDK8)** 、TypeScript、Arco Design Vue、Undertow、Sa-Token、JWT、MariaDB、MyBatis Plus、Redis、Redisson、Easy Excel、Hutool 等。
|
||||
|
||||
## 项目源码
|
||||
|
||||
|
@@ -139,10 +139,9 @@ public class LogServiceImpl implements LogService {
|
||||
public SystemLogDetailResp get(Long id) {
|
||||
LogDO logDO = logMapper.selectById(id);
|
||||
CheckUtils.throwIfNotExists(logDO, "LogDO", "ID", id);
|
||||
|
||||
SystemLogDetailResp detailVO = BeanUtil.copyProperties(logDO, SystemLogDetailResp.class);
|
||||
this.fill(detailVO);
|
||||
return detailVO;
|
||||
SystemLogDetailResp detail = BeanUtil.copyProperties(logDO, SystemLogDetailResp.class);
|
||||
this.fill(detail);
|
||||
return detail;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -68,6 +68,7 @@ public class MessageServiceImpl implements MessageService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void add(MessageReq req, List<Long> userIdList) {
|
||||
CheckUtils.throwIf(() -> CollUtil.isEmpty(userIdList), "消息接收人不能为空");
|
||||
MessageDO message = BeanUtil.copyProperties(req, MessageDO.class);
|
||||
|
@@ -135,16 +135,16 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes
|
||||
public void fillDetail(Object detailObj) {
|
||||
super.fillDetail(detailObj);
|
||||
if (detailObj instanceof RoleDetailResp) {
|
||||
RoleDetailResp detailVO = (RoleDetailResp)detailObj;
|
||||
Long roleId = detailVO.getId();
|
||||
if (SysConsts.ADMIN_ROLE_CODE.equals(detailVO.getCode())) {
|
||||
RoleDetailResp detail = (RoleDetailResp)detailObj;
|
||||
Long roleId = detail.getId();
|
||||
if (SysConsts.ADMIN_ROLE_CODE.equals(detail.getCode())) {
|
||||
List<MenuResp> list = menuService.list(null, null);
|
||||
List<Long> menuIds = list.stream().map(MenuResp::getId).collect(Collectors.toList());
|
||||
detailVO.setMenuIds(menuIds);
|
||||
detail.setMenuIds(menuIds);
|
||||
} else {
|
||||
detailVO.setMenuIds(roleMenuService.listMenuIdByRoleIds(CollUtil.newArrayList(roleId)));
|
||||
detail.setMenuIds(roleMenuService.listMenuIdByRoleIds(CollUtil.newArrayList(roleId)));
|
||||
}
|
||||
detailVO.setDeptIds(roleDeptService.listDeptIdByRoleId(roleId));
|
||||
detail.setDeptIds(roleDeptService.listDeptIdByRoleId(roleId));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -153,11 +153,11 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
|
||||
public void fillDetail(Object detailObj) {
|
||||
super.fillDetail(detailObj);
|
||||
if (detailObj instanceof UserDetailResp) {
|
||||
UserDetailResp detailVO = (UserDetailResp)detailObj;
|
||||
detailVO.setDeptName(ExceptionUtils.exToNull(() -> deptService.get(detailVO.getDeptId()).getName()));
|
||||
List<Long> roleIdList = userRoleService.listRoleIdByUserId(detailVO.getId());
|
||||
detailVO.setRoleIds(roleIdList);
|
||||
detailVO.setRoleNames(String.join(StringConsts.CHINESE_COMMA, roleService.listNameByIds(roleIdList)));
|
||||
UserDetailResp detail = (UserDetailResp)detailObj;
|
||||
detail.setDeptName(ExceptionUtils.exToNull(() -> deptService.get(detail.getDeptId()).getName()));
|
||||
List<Long> roleIdList = userRoleService.listRoleIdByUserId(detail.getId());
|
||||
detail.setRoleIds(roleIdList);
|
||||
detail.setRoleNames(String.join(StringConsts.CHINESE_COMMA, roleService.listNameByIds(roleIdList)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "continew-admin-ui",
|
||||
"description": "ContiNew Admin 中后台管理框架,Continue New Admin,持续以最新流行技术栈构建,拥抱变化,迭代优化。",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.1",
|
||||
"private": true,
|
||||
"author": "Charles7c",
|
||||
"license": "Apache-2.0",
|
||||
|
@@ -40,17 +40,17 @@ import App from './App.vue';
|
||||
import '@/assets/style/global.less';
|
||||
import '@/utils/request';
|
||||
|
||||
VueMarkdownEditor.use(createEmojiPlugin());
|
||||
VueMarkdownEditor.use(createCopyCodePlugin());
|
||||
VueMarkdownEditor.use(createTodoListPlugin());
|
||||
hljs.registerLanguage('json', json);
|
||||
hljs.registerLanguage('java', java);
|
||||
VueMarkdownEditor.use(githubTheme, {
|
||||
Hljs: hljs,
|
||||
});
|
||||
VMdPreview.use(githubTheme, {
|
||||
Hljs: hljs,
|
||||
});
|
||||
VueMarkdownEditor.use(createEmojiPlugin());
|
||||
VueMarkdownEditor.use(createCopyCodePlugin());
|
||||
VueMarkdownEditor.use(createTodoListPlugin());
|
||||
hljs.registerLanguage('json', json);
|
||||
hljs.registerLanguage('java', java);
|
||||
|
||||
const app = createApp(App);
|
||||
// 全局方法挂载
|
||||
|
@@ -23,7 +23,7 @@ export default function setupUserLoginInfoGuard(router: Router) {
|
||||
await userStore.getInfo();
|
||||
next();
|
||||
} catch (error) {
|
||||
await userStore.logout();
|
||||
await userStore.logoutCallBack();
|
||||
next({
|
||||
name: 'login',
|
||||
query: {
|
||||
|
@@ -22,8 +22,11 @@ const setTimer = (timer: number) => {
|
||||
};
|
||||
|
||||
const clearTimer = () => {
|
||||
clearInterval(Number(localStorage.getItem(TIMER_KEY)));
|
||||
localStorage.removeItem(TIMER_KEY);
|
||||
const timer = localStorage.getItem(TIMER_KEY);
|
||||
if (timer) {
|
||||
clearInterval(Number(timer));
|
||||
localStorage.removeItem(TIMER_KEY);
|
||||
}
|
||||
};
|
||||
|
||||
export { isLogin, getToken, setToken, clearToken, setTimer, clearTimer };
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import axios from 'axios';
|
||||
import type { AxiosRequestConfig, AxiosResponse } from 'axios';
|
||||
import { useUserStore } from '@/store';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { getToken, clearTimer } from '@/utils/auth';
|
||||
import modalErrorWrapper from '@/utils/modal-error-wrapper';
|
||||
import messageErrorWrapper from '@/utils/message-error-wrapper';
|
||||
|
||||
@@ -51,8 +51,7 @@ axios.interceptors.response.use(
|
||||
return res;
|
||||
}
|
||||
if ([401].includes(res.code) && response.config.url !== '/auth/user/info') {
|
||||
const userStore = useUserStore();
|
||||
userStore.logout();
|
||||
clearTimer();
|
||||
modalErrorWrapper({
|
||||
title: '确认退出',
|
||||
content: res.msg,
|
||||
@@ -60,6 +59,8 @@ axios.interceptors.response.use(
|
||||
escToClose: false,
|
||||
okText: '重新登录',
|
||||
async onOk() {
|
||||
const userStore = useUserStore();
|
||||
userStore.logoutCallBack();
|
||||
window.location.reload();
|
||||
},
|
||||
});
|
||||
|
@@ -60,7 +60,7 @@
|
||||
const { chartOption } = useChartOption((isDark) => {
|
||||
return {
|
||||
grid: {
|
||||
left: '30',
|
||||
left: '38',
|
||||
right: '0',
|
||||
top: '10',
|
||||
bottom: '50',
|
||||
@@ -114,6 +114,9 @@
|
||||
axisLabel: {
|
||||
formatter(value: any, idx: number) {
|
||||
if (idx === 0) return value;
|
||||
if (value >= 1000) {
|
||||
return `${value / 1000}k`;
|
||||
}
|
||||
return `${value}`;
|
||||
},
|
||||
},
|
||||
|
@@ -110,7 +110,6 @@ public class AuthController {
|
||||
return LoginResp.builder().token(token).build();
|
||||
}
|
||||
|
||||
@SaIgnore
|
||||
@Operation(summary = "用户退出", description = "注销用户的当前登录")
|
||||
@Parameter(name = "Authorization", description = "令牌", required = true, example = "Bearer xxxx-xxxx-xxxx-xxxx",
|
||||
in = ParameterIn.HEADER)
|
||||
|
@@ -5,7 +5,7 @@ project:
|
||||
# 应用名称
|
||||
appName: continew-admin
|
||||
# 版本
|
||||
version: 1.3.0
|
||||
version: 1.3.1
|
||||
# 描述
|
||||
description: ContiNew Admin 中后台管理框架/脚手架,Continue New Admin,持续以最新流行技术栈构建,拥抱变化,迭代优化。
|
||||
# 基本包
|
||||
@@ -58,7 +58,9 @@ springdoc:
|
||||
packages-to-scan: ${project.basePackage}.webapi.controller
|
||||
- group: 'auth'
|
||||
display-name: '系统认证'
|
||||
paths-to-match: '/auth/**'
|
||||
paths-to-match:
|
||||
- '/auth/**'
|
||||
- '/oauth/**'
|
||||
packages-to-scan: ${project.basePackage}.webapi.controller.auth
|
||||
- group: 'common'
|
||||
display-name: '通用接口'
|
||||
|
@@ -28,7 +28,7 @@ services:
|
||||
- /docker/redis/conf/redis.conf:/usr/local/redis/config/redis.conf
|
||||
- /docker/redis/data:/data
|
||||
- /docker/redis/logs:/logs
|
||||
command: 'redis-server /usr/local/redis/config/redis.conf --appendonly yes --requirepass 123456'
|
||||
command: 'redis-server /usr/local/redis/config/redis.conf --appendonly yes --requirepass 你的 Redis 密码'
|
||||
continew-admin-server:
|
||||
build: ./continew-admin
|
||||
restart: always
|
||||
@@ -67,5 +67,5 @@ services:
|
||||
volumes:
|
||||
- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
|
||||
- /docker/nginx/cert:/etc/nginx/cert
|
||||
- /docker/continew-admin/web:/usr/share/nginx/html
|
||||
- /docker/nginx/logs:/var/log/nginx
|
||||
- /docker/continew-admin/web:/usr/share/nginx/html
|
||||
|
@@ -1,6 +1,6 @@
|
||||
bind 0.0.0.0
|
||||
# redis 密码
|
||||
requirepass 123456
|
||||
requirepass 你的 Redis 密码
|
||||
|
||||
# key 监听器配置
|
||||
# notify-keyspace-events Ex
|
||||
|
4
pom.xml
4
pom.xml
@@ -52,7 +52,7 @@ limitations under the License.
|
||||
<p6spy.version>3.9.1</p6spy.version>
|
||||
|
||||
<!-- ### 工具库相关 ### -->
|
||||
<sms4j.version>3.0.3</sms4j.version>
|
||||
<sms4j.version>3.0.4</sms4j.version>
|
||||
<justauth.version>1.16.5</justauth.version>
|
||||
<easyexcel.version>3.3.2</easyexcel.version>
|
||||
<ip2region.version>2.7.15</ip2region.version>
|
||||
@@ -62,7 +62,7 @@ limitations under the License.
|
||||
<hutool.version>5.8.22</hutool.version>
|
||||
|
||||
<!-- ### 基础环境相关 ### -->
|
||||
<revision>1.3.0</revision>
|
||||
<revision>1.3.1</revision>
|
||||
<java.version>1.8</java.version>
|
||||
<spotless.version>2.30.0</spotless.version>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
|
Reference in New Issue
Block a user