diff --git a/server/crud/internal/roles.py b/server/crud/internal/roles.py
index 397ea95..06e43c2 100644
--- a/server/crud/internal/roles.py
+++ b/server/crud/internal/roles.py
@@ -10,6 +10,10 @@ class CRUDRole(CRUDBase[Role]):
def get_roles_by_id(self, session: Session, roles: List[str]):
return session.exec(select(self.model).where(self.model.id.in_(roles))).all()
+ def check_exist(self, session: Session, name: str):
+ sql = select(self.model).where(self.model.name == name)
+ return session.exec(sql).one()
+
def check_admin(self, session: Session, uid: int) -> bool:
"""
通过uid,判断此用户是否在admin组中
diff --git a/server/models/internal/role.py b/server/models/internal/role.py
index 523916b..0ef46e7 100644
--- a/server/models/internal/role.py
+++ b/server/models/internal/role.py
@@ -8,7 +8,7 @@
class RoleBase(SQLModel):
- name: str = Field(max_length=20, sa_column_kwargs={'comment': '角色名'})
+ name: str = Field(max_length=20, sa_column_kwargs={'unique': True, 'comment': '角色名'})
description: str = Field(max_length=100, sa_column_kwargs={'comment': '描述'})
enable: bool = Field(default=True, sa_column=Column(Boolean, comment='启用'))
diff --git a/server/models/internal/user.py b/server/models/internal/user.py
index 503c0a7..0292a31 100644
--- a/server/models/internal/user.py
+++ b/server/models/internal/user.py
@@ -9,7 +9,7 @@
class UserWithOutPasswd(SQLModel):
- name: str = Field(max_length=20, sa_column_kwargs={'comment': '用户名'})
+ name: str = Field(max_length=20, sa_column_kwargs={'unique': True, 'comment': '用户名'})
enable: bool = Field(default=True, sa_column=Column(Boolean, comment='可用'))
avatar: Optional[str] = Field(max_length=100, sa_column_kwargs={'comment': '头像'})
email: Optional[str] = Field(max_length=20, sa_column_kwargs={'comment': '邮箱'})
diff --git a/server/routers/internal/roles.py b/server/routers/internal/roles.py
index 71ffc7f..56b28a2 100644
--- a/server/routers/internal/roles.py
+++ b/server/routers/internal/roles.py
@@ -3,6 +3,7 @@
from fastapi import APIRouter, Depends, status
from fastapi.exceptions import HTTPException
from sqlmodel import Session
+from sqlalchemy.exc import NoResultFound
from ...common.response_code import ApiResponse
from ...common.auth_casbin import Authority
from ...common.database import get_session
@@ -53,17 +54,37 @@ async def get_roles(search: Pagination[RoleBase], session: Session = Depends(get
)
+@router.get('/roles/exist', summary='角色是否存在')
+async def check_uname_exist(name: str, session: Session = Depends(get_session)):
+ try:
+ crud.internal.role.check_exist(session, name)
+ except NoResultFound:
+ return ApiResponse()
+ else:
+ return ApiResponse(
+ message='error',
+ data='error'
+ )
+
+
@router.post('/roles', summary="新建角色", response_model=ApiResponse[Role],
dependencies=[Depends(Authority('role:add'))])
async def add_roles(role_info: RoleInsert, session: Session = Depends(get_session)):
logger.debug(role_info)
enable_menus = role_info.menus
delattr(role_info, 'menus')
- db_obj = crud.internal.role.insert(session, Role(**role_info.dict()))
- crud.internal.role.update_menus(session, db_obj, enable_menus)
- return ApiResponse(
- data=db_obj
- )
+ try:
+ db_obj = crud.internal.role.insert(session, Role(**role_info.dict()))
+ crud.internal.role.update_menus(session, db_obj, enable_menus)
+ return ApiResponse(
+ data=db_obj
+ )
+ except Exception as e:
+ logger.error(f"add role error:{str(e)}")
+ return ApiResponse(
+ code=500,
+ message=f"新建角色错误"
+ )
@router.put('/roles', summary="更新角色", response_model=ApiResponse[Role],
diff --git a/server/routers/internal/user.py b/server/routers/internal/user.py
index eb54a1c..e92d679 100644
--- a/server/routers/internal/user.py
+++ b/server/routers/internal/user.py
@@ -34,14 +34,17 @@ async def get_roles(id: Optional[int] = None, session: Session = Depends(get_ses
)
-@router.get('/users/exist', summary='用户是否存在', status_code=status.HTTP_204_NO_CONTENT)
+@router.get('/users/exist', summary='用户是否存在')
async def check_uname_exist(name: str, session: Session = Depends(get_session)):
try:
crud.internal.user.check_name(session, name)
except NoResultFound:
- return
+ return ApiResponse()
else:
- raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='用户名已存在')
+ return ApiResponse(
+ message='error',
+ data='error'
+ )
@router.get('/users/{uid}',
@@ -88,8 +91,14 @@ async def update_user(user_info: UserCreateWithRoles, session: Session = Depends
:param session:
:return:
"""
- logger.debug(user_info)
- user: User = crud.internal.user.insert(session, user_info)
+ try:
+ user: User = crud.internal.user.insert(session, user_info)
+ except Exception as e:
+ logger.error(f"User Add Error:{str(e)}")
+ return ApiResponse(
+ code=500,
+ message=f"新建用户错误"
+ )
new_roles = [role.id for role in user.roles]
for role in new_roles:
casbin_enforcer.add_role_for_user(f'uid_{user.id}', f'role_{role}')
diff --git a/www/.env.dev b/www/.env.developmentv
similarity index 100%
rename from www/.env.dev
rename to www/.env.developmentv
diff --git a/www/.env.production b/www/.env.production
new file mode 100644
index 0000000..a348a52
--- /dev/null
+++ b/www/.env.production
@@ -0,0 +1,2 @@
+NODE_ENV=production
+VITE_APP_BASEURL='http://172.16.8.201:8000'
\ No newline at end of file
diff --git a/www/.env_pro b/www/.env_pro
deleted file mode 100644
index 9a5d45f..0000000
--- a/www/.env_pro
+++ /dev/null
@@ -1,2 +0,0 @@
-NODE_ENV=production
-VUE_API_SERVER='http://172.16.8.201:8000'
\ No newline at end of file
diff --git a/www/src/api/roles.js b/www/src/api/roles.js
index 7aff33e..b04bb28 100644
--- a/www/src/api/roles.js
+++ b/www/src/api/roles.js
@@ -6,4 +6,5 @@ export const GetRoleInfo = (roleId) => GET('/api/roles' + roleId)
export const GetRoleEnableMenus = (roleId) => GET('/api/roles/enable-menus', {id: roleId})
export const PostNewRoles = (role) => POST('/api/roles', role)
export const PutRoles = (role) => PUT('/api/roles', role)
-export const DeleteRole = (roleId) => DELETE('/api/roles/' + roleId)
\ No newline at end of file
+export const DeleteRole = (roleId) => DELETE('/api/roles/' + roleId)
+export const GetRoleExist = (name) => GET('/api/roles/exist', {name})
\ No newline at end of file
diff --git a/www/src/utils/request.js b/www/src/utils/request.js
index 1c1f7da..bbc5ac6 100644
--- a/www/src/utils/request.js
+++ b/www/src/utils/request.js
@@ -74,6 +74,7 @@ service.interceptors.response.use(
message: response.data.message,
type: 'error'
})
+ return Promise.reject()
}
},
error => {
diff --git a/www/src/views/system/dictonary/index.vue b/www/src/views/system/dictonary/index.vue
index 7c5ba6d..459598b 100644
--- a/www/src/views/system/dictonary/index.vue
+++ b/www/src/views/system/dictonary/index.vue
@@ -142,15 +142,7 @@
}
})
- onMounted(() => {
- freshCurrentPage()
- })
-
\ No newline at end of file
diff --git a/www/src/views/system/roles/RoleDialog.vue b/www/src/views/system/roles/RoleDialog.vue
index feb0d7e..a24e857 100644
--- a/www/src/views/system/roles/RoleDialog.vue
+++ b/www/src/views/system/roles/RoleDialog.vue
@@ -1,8 +1,8 @@
-
-
+
+
@@ -36,10 +36,11 @@
import {
GetRoleEnableMenus,
PutRoles,
- PostNewRoles,
+ PostNewRoles, GetRoleExist,
} from '@/api/roles'
import {ElNotification} from 'element-plus'
import AutoDict from '@/components/AutoDict'
+ import {GetUserExist} from '@/api/users'
const props = defineProps(['role', 'visible'])
const emit = defineEmits(['update:visible'])
@@ -55,6 +56,22 @@
//tree的用法
const menuTree = ref(null)
+ const rules = reactive({
+ name: [{required: true, trigger: 'blur', message: '请输入角色名'},
+ {
+ required: true, trigger: 'blur',
+ validator: (rule, value, callback) => {
+ GetRoleExist(selectData.name).then((response) => {
+ if (response === 'error') {
+ callback(new Error('角色名已存在'))
+ } else {
+ callback()
+ }
+ })
+ }
+ }]
+ })
+
function GetInfo() {
console.log('id:' + selectData.id)
GetRoleEnableMenus(selectData.id).then((response) => {
diff --git a/www/src/views/system/user/UserDialog.vue b/www/src/views/system/user/UserDialog.vue
index 172cc10..2b47079 100644
--- a/www/src/views/system/user/UserDialog.vue
+++ b/www/src/views/system/user/UserDialog.vue
@@ -1,10 +1,10 @@
-
+
-
+
@@ -24,6 +24,7 @@